禁用第三方 Cookie 对 GenAuth 的影响
本文讲述浏览器阻止第三方 Cookie 时产生的影响,解释其原因以及给出解决方案。
产生影响的原因
从 13.1 版本开始,Safari 默认会阻止第三方 Cookie,会影响 GenAuth 的某些单点登录功能。其他类似的更新,从 Chrome 83 版本开始,隐身模式下默认禁用第三方 Cookie。其他浏览器也在慢慢进行此类更新以保护用户隐私。很多浏览器将禁用第三方 Cookie 作为了一个安全配置功能。
如果你使用 GenAuth 托管的登录页面的话不会受此类问题影响。自行托管登录页面以及使用 trackSession 功能的用户会受到影响。因为请求 GenAuth API 的时需要跨域携带 GenAuth 相关的 Cookie。
在浏览器发送需要携带 Cookie 的跨域请求时,浏览器会拦截 Cookie,因为用户访问的域名和 GenAuth 的域名不同源。
这些影响是什么时候发生的?
Safari 在 13.1 版本中首先引入这个功能,在 2020 年 3 月发布更新。Chrome 83 版本的隐身模式下默认启用这个功能。Firefox 会在不久的将来引入这个功能。Safari 将这个特性称为防止智能跟踪,Firefox 将这个特性称为跟踪增强保护。
主要影响那些 GenAuth 功能?
trackSession
trackSession 是 GenAuth 自研的单点登录功能。可以在任意网站通过请求 GenAuth 的 Session 端点拿到当前用户的会话 Session 信息和用户资料。
当用过 Ajax 跨域请求 GenAuth API 接口时,例如 /cas/session,会自动携带 GenAuth Cookie。浏览器会将这个 Cookie 阻止,因为请求地址与当前 URL 不同源。那么 Cookie 无法传到 GenAuth,GenAuth 便无法取出当前用户的会话信息,完成响应。最终的结果是 GenAuth 会返回尚未登录的响应。
如何解决?
除了使用 trackSession,你还有很多其他选择,例如自行维护应用的登录态,而不仅仅依赖于中央认证服务器,以及 使用 OIDC 完成单点登录,或者使用 Web SDK 完成单点登录。
如果希望使用 trackSession,你可以在浏览器的角度上,将应用的域名变成你的自定义域名。配置自定义域名请查看文档。这样一来,原来的三方 Cookie 就变成了一方 Cookie。请求 GenAuth 的 Ajax 请求域名将与应用域名同源,不会触发浏览器阻止三方 Cookie 的机制。
例如,你的 GenAuth 应用域名为 app1.authing.cn,你的应用服务器域名为 myapp.mysite.com。你需要使用 login.mysite.com 来代理 app1.authing.cn。这样就可以将 GenAuth 服务与你的应用服务放在同一个域下。
只要主域名相同即可,上例中子域名不同不会影响 Cookie 的同源策略。
当配置了自定义域名后,你需要修改 GenAuth 相关 SDK 的配置信息,将请求端点域名填写为你的自定义域名。如果你直接调用 GenAuth API,你也需要修改这些请求地址为你的自定义域名。