gpt4 book ai didi

asp.net - 太多的 cookie OpenIdConnect.nonce 导致错误页面 "Bad Request - Request Too Long"

转载 作者:行者123 更新时间:2023-12-03 13:19:20 25 4
gpt4 key购买 nike

我在 C# ASP MVC Web 应用程序中使用 OWIN/OAuth 和 OpenId Connect 身份验证 ( Microsoft.Owin.Security.OpenIdConnect )。使用 Microsoft 帐户的 SSO 登录基本上有效,但有时我会在浏览器上看到一个错误页面,上面写着 Bad Request - Request Too Long .

我发现这个错误是由太多的cookies引起的。删除 cookie 有一段时间有帮助,但过一段时间后问题又回来了。

导致问题的 cookie 是从 OpenId 框架设置的,因此有几十个 cookie 的名称类似于 OpenIdConnect.nonce.9oEtF53WxOi2uAw....... .

这不是 SPA 应用程序,但某些部分会通过 ajax 调用定期刷新。

最佳答案

事实证明,根本原因是 Ajax 调用。

有问题的流程是

1) OAuth cookie 在一段时间后过期

2) 过期通常会导致页面重定向到 login.microsoft.com刷新cookie。这一步OAuth框架添加新 nonce cookie 响应(每次)!

3) 但是 Ajax 不处理域外的重定向(跨域到 login.microsoft.com )。但是 cookie 已经附加到页面上。

4) 下一个周期性的 Ajax 调用重复了导致“nonce”cookie 快速增加的流程。

解决方案

我必须扩展“OWIN OpenId”框架设置代码以不同方式处理 Ajax 调用 - 以防止重定向并停止发送 cookie。

public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());

app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
Notifications = new OpenIdConnectAuthenticationNotifications
{
RedirectToIdentityProvider = ctx =>
{
bool isAjaxRequest = (ctx.Request.Headers != null && ctx.Request.Headers["X-Requested-With"] == "XMLHttpRequest");

if (isAjaxRequest)
{
ctx.Response.Headers.Remove("Set-Cookie");
ctx.State = NotificationResultState.HandledResponse;
}

return Task.FromResult(0);
}
}
});
}

Ajax 调用方也必须调整以检测 401代码并执行整页刷新(这会导致快速重定向到 Microsoft 权限)。

关于asp.net - 太多的 cookie OpenIdConnect.nonce 导致错误页面 "Bad Request - Request Too Long",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36795259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com