我在.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头,但是另一端没有收到它;在客户端应用上。
这有可能实现吗?
感谢您的帮助!
答案 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的限制有疑问,则应将我们的代币用于节食,并通过删除不必要的声明来减小其大小。