首页 文章

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

提问于
浏览
1

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

该问题是由openid connect创建的nonce cookie引起的 . 当它显示错误时,此时,浏览器(Chrome,Firefox和Edge)中存在超过20个这样的cookie . 我尝试了不同的东西,但仍然没有解决方案 .

EDIT

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

2 回答

  • 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

  • 0

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

    我有同样的错误,但我的解决方案最终变得不同 . 我将通过Azure AD连接成功进行身份验证 . Login.microsoft将重定向回我的应用程序 . 该应用程序然后将反弹回login.microsoft并且它将在那里循环,直到它以Bad Request Took 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身份验证”发现了这一点,因为我觉得应用程序认为身份验证是错误的 . 事实是,它永远不会回到应用程序 .

    Check Azure Authentication in Web Application

相关问题