[英]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.