0

完成本教程后:

http://bitoftech.net/2015/02/16/implement-oauth-json-web-tokens-authentication-in-asp-net-web-api-and-identity-2/

我现在有直立的解决方案,我可以发出 JWT 令牌(我认为是“登录”)并通过在后续调用期间传入这些令牌来验证请求。

我不清楚的是 [Authorize] 属性是如何:

  1. 将用户识别为已通过身份验证
  2. 从数据库中检索用户
  3. 使该用户可用于我的代码
  4. 如果我愿意,我将如何添加到身份验证过程中(可能在退出逻辑之后包括额外的身份验证逻辑)

[编辑] 我知道 JWT 令牌被用来识别用户,但我不明白这是“如何”发生的。我也了解中间件正在这样做,但它的工作原理尚不清楚。

4

1 回答 1

1
  1. 使用 [Authorize] 属性,AuthorizationFilter 将在调用控制器之前添加到过滤器链中。这篇文章说明了这一点。通过调用ConfigureOAuthTokenConsumption(教程中的第 6 步),您可以为中间件提供验证和处理令牌所需的信息。

  2. 身份验证,即检查用户名和密码,仅在令牌发出之前发生

    public override async Task 
    GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) {
    ...
        ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);
    ...
    }
    

    AuthorizationFilter 只会看到令牌并依赖于令牌本身中的信息

  3. 这篇博文为您提供了一个如何访问用户名的示例:

    var currentPrincipal = ClaimsPrincipal.Current;
    string userName = "Anonymous";
    if (currentPrincipal.Identity.IsAuthenticated)
    {
        userName = currentPrincipal.Identity.Name;
    }
    

    中间件从令牌中获取信息

  4. 您可以在发出令牌之前添加自己的逻辑, GrantResourceOwnerCredentials或者如果您在收到令牌时需要额外的逻辑,则可以添加自己的 AuthorizationFilter。3. 下链接的博客文章显示了一个示例。

于 2017-02-09T09:53:08.287 回答