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

时间:2020-10-27 05:14:05

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

我在.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头,但是另一端没有收到它;在客户端应用上。

这有可能实现吗?

感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

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

这里的另一个选项可能是从前端应用程序执行OpenID Connect身份验证(取决于身份提供者所支持的身份)。 这样,它将获得令牌并具有刷新令牌的能力,并且您的API可以专注于仅验证请求中的令牌。

答案 1 :(得分:0)

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

我没有测试此代码,只是给了您一些想法。

答案 2 :(得分:0)

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