asp.net-mvc - ASP OpenID Connect:错误请求,请求太长
问题描述
对于使用 OpenID Connect 向 Azure 进行身份验证的网站,有时我会收到消息“错误请求 - 请求太长。请求标头的大小太长”。该问题现在出现在 Google Chrome MF 和 Edge 上。删除 cookie 后,该站点将运行一个会话。重新启动浏览器时,问题再次出现。我正在运行 OpenID Connect 包的 4.0.0 版。
该问题是已知的,由 openid connect 创建的 nonce cookie 引起。当它显示错误时,浏览器(Chrome、Firefox 和 Edge)中存在 20 多个这些 cookie。我尝试了不同的东西,但仍然没有解决方案。
- @andrew.fox 在太多 cookie OpenIdConnect.nonce 的答案导致错误页面“错误请求 - 请求太长”并没有改变任何事情。
- 将包降级到版本 3.0.0 并没有解决它。由于新版本上的相关软件包导致的额外问题。
- 按照https://github.com/IdentityServer/IdentityServer3/issues/1124中的建议删除旧的 Nonce cookie只会导致删除和创建 cookie 的无限循环。
编辑
将 OpenIDConnect 包降级到版本 3.0.0 时,我第一次打开浏览器(在 IIS 中设置发布代码后)登录成功并转发到正确的页面。当关闭并重新打开浏览器时(当用户仍然登录时),无限循环在登录时开始,因为即使在成功登录后 User.Identity.IsAuthenticated 也始终为假。
解决方案
解决了我们系统上的 Chrome “OpenID Connect: Bad Request, request too long”。但现在 Firefox 正在循环播放.. /smh
我有同样的错误,但我的解决方案最终有所不同。我将通过 Azure AD 连接成功进行身份验证。Login.microsoft 将重定向回我的应用程序。然后,该应用程序将反弹回 login.microsoft 并在那里循环,直到它以 Bad Request Take To Long 错误结束。然后我注意到我有大约 39 个用于应用程序的 OpenID.connect cookie。如果我删除它们,它将在重新加载时循环。如果我删除它们并删除 login.microsoft cookie,我会回到开始并成功登录,但登录后会循环。在这里检查并进一步研究,我发现问题出在 AccountController.cs 文件中。似乎在登录页面之后,它去了服务器的根目录,而不是应用程序的根目录。该服务器上有一些应用程序。默认设置是 RedirectUri = "/" 它转到服务器的根目录。该应用程序不存在,因此它会循环回来。回环后 login.microsoft 会给出另一个好的 cookie 并发回,哈哈。我只需要将 RedirectUri = "/" 更改为 RedirectUri = "/serverfolderpath" 就可以了!
AccountController.cs
if (!Request.IsAuthenticated)
{
HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/subFolderHere" },
OpenIdConnectAuthenticationDefaults.AuthenticationType);
}
我通过检查“检查 Web 应用程序中的 Azure 身份验证”这一线索发现了这一点,因为在我看来,该应用程序认为身份验证是错误的。事实是它再也没有回到应用程序中。
推荐阅读
- python - 以编程方式设置python路径
- javascript - 通过 Js 检索共享点列表
- javascript - 在这种情况下,你能在循环中返回一个布尔值吗
- haskell - 2019 年 Yesod 正则表达式
- python - 类之间的 NaN
- simulation - 如何在 Netlogo 中随时间改变海龟的颜色?
- javascript - 是否有任何内置函数,例如在 javascript 中查找所有内容?
- javascript - 这个循环是同步执行的吗?
- python - Tkinter,xlwt,尝试编辑已在循环中创建的检查按钮
- ios - 表格视图滚动后播放/暂停按钮图像发生变化