【问题标题】:ASP.Net Core makes too many cookies for my app to handleASP.Net Core 为我的应用程序处理了太多 cookie
【发布时间】:2020-12-17 00:45:16
【问题描述】:

我有一个测试应用程序,用于测试与我的 WSO2 身份服务器 IDP 的集成。当它自己运行时,它工作得很好。它制作了一个.AspNetCore.Antiforgery cookie 和一个.AspNetCore.Cookies cookie。防伪cookie为190字节,主cookie为3.7K字节。

但如果我先登录到另一个应用程序,然后加载我的测试工具页面,它会获得 4 个额外的 cookie:

  • .AspNetCore.CookiesC1 - 4K 字节
  • .AspNetCore.CookiesC2 - 4K 字节
  • .AspNetCore.CookiesC3 - 4K 字节
  • .AspNetCore.CookiesC4 - 1K 字节

这些额外的 cookie 使我超出了某种限制,因为页面加载时出现以下错误(而不是我的应用程序):

错误请求 - 请求太长
HTTP 错误 400。请求标头的大小太长。

我不知道如何查看这些附加 cookie 中的内容,因为它们是 base 64(而且我认为它们是加密的)。

我的问题是,为什么 ASP.Net 核心会因为我登录到另一个站点(使用相同的 WSO2 IDP,但不同的 OIDC 应用程序)而添加这么多额外的 cookie?我可以防止它发生吗?

补充说明:

  • 当我一遍又一遍地重现此内容以获取详细信息时,我注意到有时它可以添加额外的 cookie,但不会给出错误消息。发生这种情况时,唯一的区别似乎是 .AspNetCore.Cookies 的原始 cookie 更改为读取“4 个块”而不是其 long 值。但这仅适用于第二个应用程序。另一个似乎可以用额外的尺寸很好地加载它(我已经尝试过颠倒顺序......)我很困惑......

【问题讨论】:

  • 大 cookie 值被分成块 github.com/aspnet/Security/issues/1536
  • 但是为什么要添加它们呢?为什么我会在乎我在不同的选项卡上登录另一个应用程序?
  • “如果我登录到另一个应用程序”是什么意思?此 cookie 代表用户及其声明。 (hajekj.net/2017/03/20/…)
  • 所以,我有两个应用程序,都来自同一个 IDP,但在那里设置为不同的 OIDC 应用程序。如果我只登录其中一个,一切都很好。如果我同时登录(在不同的选项卡上),则上述错误开始发生。不知何故,当另一个标签已经登录时,它会获得更多的 cookie。
  • 检查两个站点的登录控制器,查看它为响应设置了什么cookie。如果您想在 cookie 中设置太多信息,为什么不将其设置为标头(没有大小限制,但需要在每个请求上设置),IMO 您说的 cookie 可能不是 .net 核心设置,而是通过程序设置

标签: c# asp.net-core cookies asp.net-core-3.1


【解决方案1】:

当您的用户身份声明过多时,通常会发生这种情况。您可以尝试修改您的应用程序,使其仅在声明中保留有关您的用户的最常用信息,并按需查找其他信息。

【讨论】:

  • 我认为可能是这种情况,但我检查了 JWT,它非常小。 (错误地,绝大多数声明都没有被添加。)
猜你喜欢
  • 2019-11-05
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
  • 2021-02-05
  • 1970-01-01
  • 2020-07-07
  • 2018-06-06
  • 2020-10-24
相关资源
最近更新 更多