我知道之前已经有人问过类似的问题在堆栈溢出,但它对我不起作用。请在回答/评论之前阅读整个问题。
我已经在两个网络应用程序中实现了 AD B2C,直到上周都工作正常。现在突然间我们得到了
错误请求 - 请求太长 HTTP 错误 400。请求的大小 标题太长。
当用户尝试登录网站时。由于我的网站要求每个用户都登录,所以它完全阻止了我们。
我的网络应用程序也无法在隐身/私密窗口中运行。浏览器:Chrome、Firefox 和 Edge
删除所有历史记录后,当我在 Chrome 中打开应用程序(不是隐身模式)时,我可以看到 Web 应用程序 URL 中有大约 160 多个 Cookie。
是的,太多的cookie似乎正在杀死我的网络应用程序,但即使在删除浏览器和私人浏览的所有历史记录之后,它也会发生。
即使我已将声明属性减少到 3,怀疑更多的声明属性可能会增加标头大小。
我也尝试过这个但没有成功。
底线:删除 cookie 和减少索赔对我们来说都不起作用,我们被阻止了。提前致谢。
在向 Microsoft 支持团队提出请求后,我解决了此问题。
原因: Owin 中间件有一个众所周知的问题,它没有设置身份验证 cookie,导致我们最终陷入登录循环。我使用的是旧版本的 OWIN。
解决方案: OWIN 版本 3.1.0.0 已集成了 cookie 管理器方面的修复。
注意: 尽管使用了修复程序,但如果我们在应用程序中使用自定义 SESSIONSTATE 处理程序,我们仍然可能会遇到问题。在 STARTUP.AUTH.CS 中,我们需要进行以下更改
旧:
app.UseCookieAuthentication(new CookieAuthenticationOptions{});
新:
app.UseCookieAuthentication(new CookieAuthenticationOptions {
AuthenticationType = "Cookies",
CookieManager = new Microsoft.Owin.Host.SystemWeb.SystemWebChunkingCookieManager()
});
下面是讨论相同问题的问题:
第一次成功登录后,第二次登录会导致无限重定向循环 MVC .NET 5 OWIN ADAL OpenIDConnect
希望这对其他人有帮助。
快乐编码。
通过 OpenID Connect 将 Microsoft Entra ID(以前称为 Microsoft Azure AD)集成到我自己的部署在 IIS 上的具有 ASP.NET Core Identity 的 Identity Server 实现中时,我遇到了同样的错误。
登录 Microsoft 后,某些用户在 cookie 中包含过多信息,因此我的故障排除重点是让我的 Windows Server 支持标头中接收的附加数据量。
为了实现此目的,我在以下 Windows 注册表路径中添加了两个新值: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
姓名 | 值类型 | 价值数据 |
---|---|---|
最大字段长度 | 双字 | 65534(十进制) |
最大请求字节数 | 双字 | 415028(十进制) |
这里是帮助我解决该问题的 Microsoft 官方文档:HTTP 400 Bad Request(请求标头太长)对 HTTP 请求的响应 - 解决方法 2:设置 MaxFieldLength 和 MaxRequestBytes 注册表项。