【问题标题】:What's the wrong with making the ApplicationCookie SameSite=Strict in IdentityServer4?在 IdentityServer4 中设置 ApplicationCookie SameSite=Strict 有什么问题?
【发布时间】:2021-07-03 03:46:46
【问题描述】:

我正在开发一个IdPIdentityServer4,一切正常,但现在从安全角度来看,我想尽可能保证它的安全;所以我将所有的 cookie SameSite 设为 Strict,然后在以下情况下得到 HTTP error code 400

  • 用户TestUser打开客户端应用A
  • TestUser 已登录客户端应用程序 A
  • TestUser 从客户端应用程序注销A
  • TestUser 正在尝试再次登录客户端应用程序A(他/她点击客户端应用程序A 中的登录按钮)
  • 此时,TestUser 重定向到我的IdP 的登录页面,但只接收HTTP 400 error code 并且没有显示其他详细信息来检查状态。

这是我的 cookie:

还有我的配置:

// Identity Cookie (Authentication cookie)
services.ConfigureApplicationCookie(options =>
{
    // options.Cookie.Name = ..... 
    options.Cookie.HttpOnly = true;
    options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
    options.Cookie.SameSite = SameSiteMode.Strict;  // <<<<<<<<<<<<<<<<<<<<<<< 
    options.SlidingExpiration = false;

    // without expire time ~> session cookie. destroy after closing the browser
    // options.ExpireTimeSpan = TimeSpan.FromSeconds(10000);
    // options.Cookie.Expiration = TimeSpan.FromSeconds(1000);
});

如您所见,.AspNetCore.Identity.Application(应用程序 cookie)cookie 设置为 SameSite=Strict。如果SameSite 设置为Lax,一切正常,但在这种情况下SameSite=Strict 是怎么回事?

【问题讨论】:

    标签: asp.net-core security cookies identityserver4 samesite


    【解决方案1】:

    简而言之,因为 IdentityServer4(以及任何 OpenID Connect 提供商)依赖于不同站点之间的 HTTP 重定向和 OIDC 端点本身的 cookie 身份验证。 SameSite=Strict 本质上与主要身份验证 cookie 必须执行的职责不兼容,除非所有客户端都位于同一站点内(根据构成“同一站点”的 SameSite 规则)。

    当您从 client.x.com -> idp.y.com 移动时,这是一个非 SameSite 导航,因此 idp.y.com 的任何 Strict cookie 都将被浏览器阻止。

    拥有 SameSite=None 是可以的,但前提是您在所有受 cookie 保护的端点上都有全面的 CSRF 保护。请注意,idsrv.session 必须为 SameSite=None,因为它由加载在客户端应用程序的 iframe 内的会话监控端点使用。

    如果您在开发人员工具中检查请求 cookie,您会看到此行为 - 它会用警告三角形指示被阻止的 cookie,并在工具提示中说明原因。

    【讨论】:

    • 好的,谢谢。我知道ApplicationCookie。但是idsrv.session cookie 可以是Lax 吗?我应该关心XSS attacks 或其他问题吗?
    • idsrv.session 也需要为 None,因为它在 iframe 中使用。如果不打算使用该功能,则无需担心。您需要为任何非身份服务器4 端点实施自己的 CSRF 保护,但 ASP.Net Core 对此提供了不错的支持。
    猜你喜欢
    • 2020-05-16
    • 1970-01-01
    • 2019-04-02
    • 2017-02-06
    • 1970-01-01
    • 2010-09-21
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多