【问题标题】:Retrieve raw jwt token value in asp.net core在 asp.net 核心中检索原始 jwt 令牌值
【发布时间】:2018-03-22 04:27:20
【问题描述】:

我想从授权请求中检索 jwt 令牌的原始值。我知道这是所有声明的来源,但我有一个需要原始原始值的用例。有没有办法找回它?如果它取决于身份验证类型,我们使用 OpenIdConnect (scheme = Oidc)。

【问题讨论】:

    标签: asp.net-core openid jwt


    【解决方案1】:

    根据您的设置,您可以简单地从授权标头中获取访问令牌。示例:

    [Authorize(AuthenticationSchemes = "Bearer")]
    [HttpGet("GetStuff")]
    public async Task<IActionResult> GetStuff()
    {
       var access_token = HttpContext.Request.Headers["Authorization"];
    }
    

    在 Core 2.0 中,ycrumeyrolle 的答案中的 AuthenticationManager 类已被标记为过时。您可以替换这行代码:

    var token = await AuthenticationHttpContextExtensions.GetTokenAsync(HttpContext, "<name_of_signin_scheme>", "access_token");
    

    【讨论】:

      【解决方案2】:

      原始是什么意思?令牌本身是原始的,只是令牌本身的 base64。如果你把令牌放在jwt.io 上,你总是可以解码它,这不是什么秘密。

      如果您认为需要原始令牌是因为您需要它本身具有的某些值,那么最好的做法是将这些元素的副本添加到授权响应中,作为附加项。

      【讨论】:

      • 其实我需要做的是从用户的传入请求中提取令牌,并在出站请求中从服务器转发到下游服务。
      【解决方案3】:

      你可以试试这个:

      // add JWT authentication (change to OIDC if you prefer)
      app.UseJwtBearerAuthentication(new JwtBearerOptions 
      { 
         StoreToken = true       
      }); 
      
      
      // then in your code...
      var rawToken = await authenticationManager.GetTokenAsync("<name_of_signin_scheme>", "access_token");
      

      缺点是令牌将存储在属性中,然后存储在身份验证 cookie(如果有)中。

      否则,您可以通过 ReceivedToken 事件获取原始令牌。

      GetTokenAsync() 方法可以在 Microsoft.AspNetCore.Authentication 的同名命名空间中找到。

      【讨论】:

      • authenticationManager 对象的类型是什么? GetTokenAsync 是扩展方法吗?我在看Microsoft.AspNetCore.Http.Authentication.AuthenticationManager,没有看到那个方法。
      • 确实是一种扩展方法,刚刚在Microsoft.AspNetCore.Authentication.AuthenticationTokenExtensions找到。让我试一试,如果可行,我会接受你的回答。
      • 我需要添加什么包/命名空间才能访问该扩展方法?我尝试添加Microsoft.AspNet.Security,但我仍然没有Microsoft.AspNetCore 命名空间(更不用说它的任何子命名空间了)。
      • 我找到了,它在最新的 RC1 版本中不可用。它是后来添加的,尚未在稳定版本中发布。
      • 原始令牌也应该在 ClaimsIdentity.BootstrapContext 中可用。
      【解决方案4】:

      有一篇关于这个问题的简短博客文章:http://www.jerriepelser.com/blog/aspnetcore-jwt-saving-bearer-token-as-claim/

      您可以将令牌保存在AuthenticationProperties 中(另请参阅@ycrumeyrolle 的答案)。或者您将令牌保存为OnTokenValidated 回调中的声明。这是在JwtBearerOptions 中设置的。有关所有详细信息,请参阅链接文章。

      【讨论】:

        猜你喜欢
        • 2023-03-19
        • 2020-09-29
        • 2018-03-03
        • 2019-07-25
        • 2019-05-23
        • 2020-08-24
        • 2020-02-16
        • 1970-01-01
        • 2020-04-02
        相关资源
        最近更新 更多