繁体   English   中英

如何在 Aspnet Core 中的授权标头中存储 JWT 令牌

[英]How to store JWT Token in authorization header in Aspnet Core

我在 .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 长度太小,所以我想尝试将它移动到授权标头。

我已经尝试设置 Response 标头,但没有在另一端收到它; 在客户端应用程序上。

这有可能实现吗?

谢谢你的帮助!

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

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

将您的令牌放在响应正文中并包含 [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
  }
});

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM