【问题标题】:How are users authenticated and retrieved?如何对用户进行身份验证和检索?
【发布时间】:2017-06-26 02:43:53
【问题描述】:
【问题讨论】:
标签:
asp.net-web-api
authorization
jwt
owin-middleware
【解决方案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. 下链接的博客文章显示了一个示例。