【问题标题】:How are users authenticated and retrieved?如何对用户进行身份验证和检索?
【发布时间】:2017-06-26 02:43:53
【问题描述】:

已经完成了本教程:

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 令牌被用来识别用户,但我不明白这是“如何”发生的。我也知道中间件是这样做的,但是它的工作原理还不清楚。

【问题讨论】:

    标签: asp.net-web-api authorization jwt owin-middleware


    【解决方案1】:
    1. 带有 [Authorize] 属性的 AuthorizationFilter 将在调用控制器之前添加到过滤器链中。 This article 说明了这一点。 通过调用 ConfigureOAuthTokenConsumption(本教程中的第 6 步),您可以为中间件提供验证和处理令牌所需的信息。

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

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

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

    3. this blog post 提供了一个如何访问用户名的示例:

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

      中间件从令牌中获取信息

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

    【讨论】:

      猜你喜欢
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 2013-03-11
      • 2019-05-02
      • 2013-01-19
      相关资源
      最近更新 更多