如何对用户进行身份验证和检索?
How are users authenticated and retrieved?
完成本教程后:
我现在有了直立的解决方案,我可以发出 JWT 令牌(我认为是 'login')并通过在后续调用中传递这些令牌来验证请求。
我不清楚 [Authorize] 属性是怎样的:
- 将用户识别为已通过身份验证
- 正在从数据库中检索用户
- 使该用户可用于我的代码
- 如果我愿意,我将如何添加到身份验证过程(可能在退出逻辑之后包括额外的身份验证逻辑)
[编辑] 我知道 JWT 令牌被用来识别用户,但我不明白 'how' 这正在发生。我也明白是中间件在做,但是这个的工作原理还不清楚。
使用 [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 下链接的博客 post 显示了一个示例。
完成本教程后:
我现在有了直立的解决方案,我可以发出 JWT 令牌(我认为是 'login')并通过在后续调用中传递这些令牌来验证请求。
我不清楚 [Authorize] 属性是怎样的:
- 将用户识别为已通过身份验证
- 正在从数据库中检索用户
- 使该用户可用于我的代码
- 如果我愿意,我将如何添加到身份验证过程(可能在退出逻辑之后包括额外的身份验证逻辑)
[编辑] 我知道 JWT 令牌被用来识别用户,但我不明白 'how' 这正在发生。我也明白是中间件在做,但是这个的工作原理还不清楚。
使用 [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 下链接的博客 post 显示了一个示例。