Azure AD B2C:错误请求 - 请求太长 HTTP 错误 400。请求的大小 headers 太长。登录后

Azure AD B2C: Bad Request - Request Too Long HTTP Error 400. The size of the request headers is too long. After login

我知道之前有人问过类似的问题 但它对我不起作用。请在 answering/commenting 之前阅读整个问题。

我已经在两个 Web 应用程序中实施了 AD B2C,直到上周都运行良好。现在突然间我们得到

Bad Request - Request Too Long HTTP Error 400. The size of the request headers is too long.

当用户尝试登录网站时。由于我的网站要求每个用户都必须登录,所以它完全阻止了我们。

我的网络应用程序在 incognito/inprivate window 中也无法运行。浏览器:Chrome、Firefox 和 Edge

删除所有历史记录后,当我在 chrome(非隐身)中打开应用程序时,我可以看到来自网络应用程序的大约 160 多个 cookie url。

是的,太多的 cookie 似乎正在杀死我的网络应用程序,但即使在删除所有浏览器历史记录和隐私浏览后,它也会发生。

甚至我已经将 claims 属性减少到 3,怀疑更多的 claims 属性可能会增加 header 大小。

我试过this too但没有成功。

底线:删除 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() 
  });

下面是讨论相同的问题:

Second sign-in causes infinite redirect loop after the first successful login MVC .NET 5 OWIN ADAL OpenIDConnect

希望这对其他人有所帮助。
快乐编码。