ASP OpenID Connect:错误的请求,请求太长

时间:2018-08-01 14:22:20

标签: asp.net-mvc cookies azure-active-directory owin openid-connect

对于使用OpenID Connect进行Azure身份验证的网站,有时会收到“请求错误-请求时间过长”消息。请求标头的大小太长”。现在,此问题发生在Google Chrome MF和Edge上。删除Cookie后,该站点将工作一个会话。重新启动浏览器后,问题再次出现。我正在运行4.0.0版的OpenID Connect软件包。

该问题是已知的,并且是由openid connect创建的随机数cookie引起的。当显示错误时,此时,浏览器(Chrome,Firefox和Edge)中存在超过20个此类cookie。我尝试了不同的方法,但仍然没有解决办法。

编辑

将OpenIDConnect软件包降级到3.0.0版时,第一次打开浏览器(在IIS中设置发布的代码后)登录成功,并且登录到正确的页面。关闭并重新打开浏览器时(当用户仍处于登录状态时),由于登录User.Identity.IsAuthenticated始终为false,因此即使登录成功,登录也会开始无限循环。

2 个答案:

答案 0 :(得分:0)

奇怪的是,删除cookie并在新的浏览器中尝试不起作用!

尝试将以下内容添加到您的web.config:

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxQueryString="32768"/>
    </requestFiltering>
  </security>
</system.webServer>

请参阅:

http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering/requestLimits

您可能还必须在web.config中添加以下内容:

<httpRuntime maxQueryStringLength="32768" maxUrlLength="65536"/>

当然,这些数字只是示例,您不必在这些设置中使用这些确切的值。

还可以解决无限循环的情况:http://erlend.oftedal.no/blog/?blogid=55

答案 1 :(得分:0)

在我们的系统上解决了Chrome“ OpenID Connect:错误的请求,请求时间过长”的问题。 但是现在Firefox正在循环播放。。/ smh

我有相同的错误,但是我的解决方案最终有所不同。我将通过Azure AD连接成功进行身份验证。 Login.microsoft将重定向回我的应用程序。然后,该应用程序将重新弹回login.microsoft,它将在该处循环播放,直到结束,导致Bad Request Took To Long错误。然后我注意到该应用程序的OpenID.connect大约有39个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身份验证”线索发现了这一点,因为在我看来,问题在于该应用程序认为身份验证是错误的。事实是,它永远不会回到应用程序。

Check Azure Authentication in Web Application