Security 如果所有浏览器都会阻止跨站点跟踪,那么单点登录应该如何工作

Security 如果所有浏览器都会阻止跨站点跟踪,那么单点登录应该如何工作,security,cookies,authorization,single-sign-on,cross-site,Security,Cookies,Authorization,Single Sign On,Cross Site,越来越多的现代浏览器默认情况下禁止跨站点跟踪。例如,Safari、Firefox、Brave都使用“防止跨站点跟踪”作为默认选项。我分析了我们的用户,发现其中6%的用户阻止跨站点跟踪,并且在授权和刷新令牌方面存在问题。但我相信这个比例会上升。据新闻报道,Safari将在默认情况下继续阻止跟踪 也许,这是一件好事,但它打破了大多数单点登录实现 案例 假设我们有一个大型国际服务,一个国家有一个域名:site.com、site.ae、site.ru、site.ca、。我们在SSO.site.com上提

越来越多的现代浏览器默认情况下禁止跨站点跟踪。例如,Safari、Firefox、Brave都使用“防止跨站点跟踪”作为默认选项。我分析了我们的用户,发现其中6%的用户阻止跨站点跟踪,并且在授权和刷新令牌方面存在问题。但我相信这个比例会上升。据新闻报道,Safari将在默认情况下继续阻止跟踪

也许,这是一件好事,但它打破了大多数单点登录实现

案例

假设我们有一个大型国际服务,一个国家有一个域名:
site.com、site.ae、site.ru、site.ca、
。我们在
SSO.site.com
上提供的SSO服务遵循三条规则:

  • 用户在SSO域中登录一次
  • 在所有域上授权用户
  • 他的会话不会过期,因为我们会尽可能长时间地保存他登录(当然,直到有一天他注销)
  • 太棒了。它帮助用户。用户不关心重新授权。而且它使公司的事情变得更容易,因为只有一个授权服务。你不必为一项新服务想出另一个

    现代SSO实现(即Auth0、stackauth e.t.c)如何实现这一点?

    它们将令牌(访问、刷新、JWT等)存储在SSO域
    SSO.site.com
    的cookie中。例如,当用户打开
    site.ae或site.ca
    时,他的用户代理向SSO发送请求,SSO检查存储在cookie中的凭据,实现这些凭据(如果需要)并发送回响应,然后应用程序向另一个后端e.t.c请求用户数据

    问题

    但如果用户代理在默认情况下阻止跨站点cookie,则不可能做到这一点。原因SSO Cookie不会从另一个域(即
    site.ae
    )发送,除非
    site.com
    ,因为SSO存在于
    SSO.site.com

    在不久的将来,我们可能不会使用cookies。是的,我们可以使用一系列重定向。想象一下,如果你有数百个域,每个重定向都需要10毫秒!它会降低性能和用户体验


    所以我的问题是,当所有浏览器都阻止跨站点跟踪时,我们如何在世界上的许多域上登录用户并让他们获得授权?

    SSO协议通常不使用跨站点cookie。开放式ID连接(OIDC)的典型用例:

    • 用户在成功验证IdP域(例如
      sso.site.com
    • 每个OIDC应用程序将未经身份验证的用户重定向到IdP登录页面,IdP使用令牌/代码(取决于使用的流量)将浏览器重定向回(如果存在IdP会话或成功进行用户身份验证),然后OIDC应用程序在其自己的域上处理身份验证Cookie/id令牌/访问令牌/令牌刷新

    IdP会话的类似方法也使用SAML SSO协议。

    SSO协议通常不使用跨站点cookie。开放式ID连接(OIDC)的典型用例:

    • 用户在成功验证IdP域(例如
      sso.site.com
    • 每个OIDC应用程序将未经身份验证的用户重定向到IdP登录页面,IdP使用令牌/代码(取决于使用的流量)将浏览器重定向回(如果存在IdP会话或成功进行用户身份验证),然后OIDC应用程序在其自己的域上处理身份验证Cookie/id令牌/访问令牌/令牌刷新

    IdP会话的类似方法也使用SAML SSO协议。

    感谢您的回复。如果我理解正确,我们必须在启动应用程序时重定向到SSO,然后SSO决定要做什么。这意味着我们不能在后台发出ajax请求来检查用户是否授权。在这种情况下,我们无法在后台刷新用户的过期会话。为了授权他,我们总是不得不打断他(有时或一直打断他)。@mailman_73不,我建议学习基本的OIDC授权代码流(通常是整个OIDC规范,但OIDC只是众多SSO协议中的一个)。重定向实际上取决于应用程序的业务逻辑。应用程序的某些部分可能不需要任何auth+即可使用,通常使用OIDC LIB,这些部分正在执行重定向。此外,IDP(如Auth0、KeyClope等)有相当好的文档,这也是深入理解它的良好起点。感谢您的回复。如果我理解正确,我们必须在启动应用程序时重定向到SSO,然后SSO决定要做什么。这意味着我们不能在后台发出ajax请求来检查用户是否授权。在这种情况下,我们无法在后台刷新用户的过期会话。为了授权他,我们总是不得不打断他(有时或一直打断他)。@mailman_73不,我建议学习基本的OIDC授权代码流(通常是整个OIDC规范,但OIDC只是众多SSO协议中的一个)。重定向实际上取决于应用程序的业务逻辑。应用程序的某些部分可能不需要任何auth+即可使用,通常使用OIDC LIB,这些部分正在执行重定向。此外,IDP(例如Auth0、KeyClope等)有相当好的文档,这也是更深入地理解它的良好起点。