首页 > 解决方案 > 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。我尝试了不同的东西,但仍然没有解决方案。

编辑

将 OpenIDConnect 包降级到版本 3.0.0 时,我第一次打开浏览器(在 IIS 中设置发布代码后)登录成功并转发到正确的页面。当关闭并重​​新打开浏览器时(当用户仍然登录时),无限循环在登录时开始,因为即使在成功登录后 User.Identity.IsAuthenticated 也始终为假。

标签: asp.net-mvccookiesazure-active-directoryowinopenid-connect

解决方案


解决了我们系统上的 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 身份验证”这一线索发现了这一点,因为在我看来,该应用程序认为身份验证是错误的。事实是它再也没有回到应用程序中。

在 Web 应用程序中检查 Azure 身份验证


推荐阅读