完成了本教程:
我现在有直立的解决方案,我可以发出JWT令牌(我认为是'登录')并通过在后续呼叫期间传递这些令牌来验证请求。
我不清楚的是[授权]属性是如何:
[编辑]我知道JWT令牌被用来识别用户,但我不明白这是怎么回事。我也理解中间件正在做这件事,但其工作原理尚不清楚。
答案 0 :(得分:1)
使用[Authorize]属性,在调用控制器之前,AuthorizationFilter将添加到过滤器链中。 This article说明了这一点。
通过调用ConfigureOAuthTokenConsumption
(教程中的步骤6),您可以为中间件提供验证和处理令牌所需的信息。
身份验证,即检查用户名和密码,仅在
中发出令牌之前发生public override async Task
GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) {
...
ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);
...
}
AuthorizationFilter只会看到令牌并依赖令牌本身的信息
this blog post为您提供了如何访问用户名的示例:
var currentPrincipal = ClaimsPrincipal.Current;
string userName = "Anonymous";
if (currentPrincipal.Identity.IsAuthenticated)
{
userName = currentPrincipal.Identity.Name;
}
中间件从令牌中获取信息
您可以在GrantResourceOwnerCredentials
中发出令牌之前添加自己的逻辑,或者如果在收到令牌时需要添加逻辑,则可以添加自己的AuthorizationFilter。在3下链接的博客文章显示了一个例子。