好的。
我想知道您是否可以帮助我解决我在使用 WEB API 2 开发 API 时遇到的问题。
我们决定与我的团队实施基于令牌的身份验证。
一旦用户注册然后生成令牌,该信息(令牌,来自,到等)在哪里持久化?
我没有看到任何内容被保存到身份模型 (AspNetxx) 表中。
非常感谢你的帮助。
好的。
我想知道您是否可以帮助我解决我在使用 WEB API 2 开发 API 时遇到的问题。
我们决定与我的团队实施基于令牌的身份验证。
一旦用户注册然后生成令牌,该信息(令牌,来自,到等)在哪里持久化?
我没有看到任何内容被保存到身份模型 (AspNetxx) 表中。
非常感谢你的帮助。
当您使用代码公开端点时,令牌是根据声明生成的
重要的是您在其中定义的第一行
/Token
是客户端使用服务,该服务将返回在调用其他请求时需要授权的令牌。这就是为什么它不会持续存在,而是临时的,您将使用它来调用需要身份验证的 webapi 服务。在 ASP.NET Web API 2.2 中使用个人帐户和本地登录保护 Web API
一方面是用户注册,另一方面是您如何请求令牌以能够向标记为 withn 的 webapi 服务发出请求
[Authorize]
。从文章中他分析了标题“配置授权服务器”,他解释了如何将服务公开/Token
为需要身份验证令牌的客户端使用的端点。当您需要调用 webapi 服务时,您必须在标头中发送该令牌,您肯定会将其保留在
storage
delhtml
中。[ASPNET Web API] 在 Web API 中使用不记名令牌
在第二个示例中,您将看到令牌是如何在
Bearer
标头中发送的。这就是为什么一方面您拥有用户数据来验证访问权限,另一方面是使用令牌的授权系统。
>>1)如果令牌没有持久化并且是动态生成的......每次发出请求并且令牌通过heder(授权)它与什么比较?
我知道这是声明发挥作用的地方,因为您分配的信息将用于生成令牌。如果您分析第一个链接的示例,您将看到一行定义
您可以分析实现它的代码
github
ApplicationOAuthProvider.cs
您可以找到用户凭据的验证
以及它如何生成那些
Claims
将定义token
.在 webapi 服务方面,当令牌到达时,它将验证其有效性,而不是用户的凭据,这在请求令牌时已经完成。接收令牌的客户端和生成令牌的服务器之间没有通信。
>>2) 如果执行 iis 重置会发生什么?
token有过期时间,定义的时候比较多
OAuthAuthorizationServerOptions
,可以指定这个值虽然想法是让它尽可能小,但这就是为什么建议您考虑实施
RefreshToken
AngularJS:使用 ASP.NET Web API 2 启用 OWIN 刷新令牌
正如@rsciriano 评论的那样,如果您重新启动客户端的 IIS 服务,令牌仍然有效。
它
Token
不存储在服务器上,而是加密发送到客户端,并包含识别它和检查其有效性所需的所有信息。当从客户端通过发送请求发出请求时
Token
,服务器对其进行解密、检查其有效性并使用其中包含的数据建立安全上下文。您可以使用@Leandro-Tuttini 在他的回答中链接的“使用个人帐户和本地登录保护 Web API”项目来测试这种行为(它帮助我完成了对这一切的理解)。
第一件事是在不修改任何内容的情况下进行测试,我们捕获身份验证流量并复制
Token
已返回的流量GenerateUserIdentityAsync
然后我们通过添加一个额外的声明来修改该方法loremImsum
再次测试时,我们看到 的大小是如何
Token
增长的,因为它包含了 newClaim
,也就是说,它包含Token
了所有Claims
用户的身份这篇“ Web Api 2 Bearer authentication 的简单解释”(英文)非常有趣,因为它一步一步地解释了身份验证的工作原理
Bearer
,而且他们提到的一件事是它Token
没有保存在服务器上,而是加密发送的。我还验证了一旦通过身份验证,如果您停止站点并重新启动它,您可以使用
Token
您保存的站点继续发出请求(它能够解密并且仍然有效)。出于这个原因,文章中提出的建议之一是证书的有效期Token
非常短。要记住的另一件事是用于加密令牌的DataProtectorTokenProvider,因为默认使用的令牌基于本地服务器密钥,因此它在负载平衡环境中不起作用(在这些环境中,您可以使用一个基于证书)