Apple Safari 已经提供默认启用的隐私保护功能,称为智能跟踪保护 (ITP)。 ITP 会阻止“第三方”的 Cookie – 包含在跨域请求中的 Cookie。
常见的用户跟踪形式是:在后台将一个 iframe 加载到第三方站点,并使用 Cookie 在整个 Internet 中关联用户。【遗憾的是,此模式也是单页应用 (SPA) 中实现Oauth 2.0 的隐式流(Implicit Grant Flow)的标准方式】
当浏览器阻止第三方 Cookie 以阻止用户跟踪时,SPA 也会中断。【并非只有 Safari】通过阻止第三方 Cookie 来增强用户隐私保护。Brave 默认已阻止第三方 Cookie,而 Chromium(基于 Google Chrome 和 Microsoft Edge 的平台)也已宣布,在 2023 年年底停止支持第三方 Cookie。
因为上述的从浏览器中删除第三方 Cookie 的行为,隐式授权流不再是合适的身份验证方法。 如果没有第三方 Cookie,隐式流的无提示 SSO 功能将不起作用,导致应用程序在尝试获取新令牌时中断。 强烈建议你让所有新的应用程序都使用 【授权代码流(Authorization Code Flow)】,并让现有的单页应用也开始迁移到授权代码流。
这对于所有基于 SPA 开发并包含联合认证登录方式的网站,【都会产生重大影响】,需要你对项目进行重大重构和修改。
相关参考
- Apple Safari 通告 https://webkit.org/tracking-prevention-policy
- Microsoft Edge 通告 https://answers.microsoft.com/en-us/microsoftedge/forum/all/edge-chromium-blocking-third-party-cookies/5d981ee9-1fc1-4878-b158-36dc3380bd86
- Google Chrome 通告 https://blog.chromium.org/2020/01/building-more-private-web-path-towards.html
- 技术细节:在 Safari 和其他阻止第三方 Cookie 的浏览器中处理 ITP
https://docs.microsoft.com/zh-cn/azure/active-directory/develop/reference-third-party-cookies-spas - 技术细节:隐式授权流
https://docs.microsoft.com/zh-cn/azure/active-directory/develop/v2-oauth2-implicit-grant-flow - 技术细节:授权代码流 https://docs.microsoft.com/zh-cn/azure/active-directory/develop/v2-oauth2-auth-code-flow
- RFC 6749 OAuth 2.0 Framework 的 4 种验证方式 https://www.rfc-editor.org/rfc/rfc6749.html
Apple Safari 已经启用此限制,Chromium 将在 2023 年底前启用。这是一个类似于“微软将会从 Windows 中移除 IE” 一个级别的信息,请大家务必注意。