【问题标题】:How to store JWT Token in authorization header in Aspnet Core如何在 Aspnet Core 的授权标头中存储 JWT 令牌
【发布时间】:2021-02-09 09:20:06
【问题描述】:

我在 .Net Core 中有一个“身份验证服务”应用程序,它通过质询请求进行身份验证,然后使用令牌重定向回客户端应用程序。

    [AllowAnonymous]
    [HttpGet("Login")]
    public IActionResult Login()
    {
        return Challenge(new AuthenticationProperties
        {
            RedirectUri = returnUrlQs
        }, OpenIdConnectDefaults.AuthenticationScheme);
    }

目前,我使用 options.Events.OnAuthorizationCodeReceived OpenId Connect 事件通过 HTTP cookie 传输令牌。但是 4kb 的 cookie 长度太小了,所以我想尝试将其移至授权标头。

我已尝试设置响应标头,但另一端未收到;在客户端应用程序上。

这有可能实现吗?

感谢您的帮助!

【问题讨论】:

    标签: c# asp.net-core jwt openid-connect


    【解决方案1】:

    设置请求标头是客户端的工作,而不是 API 的工作。 所以你的后端不能设置这些。 您需要返回令牌,以便前端的代码可以获取它,然后将其分配为未来请求的请求标头。

    这里的另一个选项可能是从您的前端应用程序执行 OpenID Connect 身份验证(取决于您的身份提供者支持的内容)。 通过这种方式,它可以获得令牌并能够刷新它们,并且您的 API 可以专注于验证请求中的令牌。

    【讨论】:

      【解决方案2】:

      将您的令牌放入响应正文并包含 [Authorize] 属性。 例如:

      //in your api
      [Authorize]
      [HttpPost("update")]
      private IActionResult update([FromBody] Model model){
      //do some actions here
      }
      

      在您的客户端,您通过会话或任何临时存储存储您的令牌,然后在必要时检索它并将其放入您的标头中。 做这样的事情:

        //in your client
        $.ajax({
        type: "POST",
        url: "/update",
        data: {someParameter: "some value"},
        contentType: "application/json; charset=utf-8",
        Authorization : "Bearer " + yourToken,
        dataType: "json",
        success: function(msg) {
          //some code
        }
      });
      

      我没有测试这段代码,只是为了给你一些想法。

      【讨论】:

      • 这看起来在正确的轨道上,有没有办法从API方法中获取令牌?
      • @user3167162 是的,但是您需要将其与登录的用户一起存储在数据库中,以便您可以从数据库中获取令牌
      • @user3167162 您可以通过响应正文在 api 中获取令牌,也可以使用登录的用户 ID 将 jwt 插入数据库中,并在需要时稍后获取。
      • 谢谢@jean,但我想你错过了我的问题。如果我有一个带有 [Authorize] 标签的 REST API,有没有办法从方法中获取令牌,以便我可以在响应正文中返回它?
      【解决方案3】:

      如果您对 4Kb 限制有疑问,那么您应该节食我们的代币,并通过删除不必要的声明来减小其大小。

      【讨论】:

      • 我们可能会超过 4kb 来存储授权信息。
      • 通常你真的不需要在令牌中存储那么多,而是你可以在需要时查找或缓存不经常访问的信息,如配置文件数据。
      猜你喜欢
      • 2021-07-22
      • 2016-03-08
      • 2015-09-27
      • 2019-02-27
      • 2020-04-28
      • 2015-05-26
      • 1970-01-01
      • 2013-01-21
      • 2021-04-07
      相关资源
      最近更新 更多