可跨多站点持久保留用户session的Widget开发方案咨询
1. 第一方Cookie + OAuth2/OIDC 静默授权流
采用div形式将Widget嵌入宿主站点,登录流程走标准OAuth2.0/OpenID Connect授权码模式:用户点击登录时跳转至你的统一身份服务域名完成认证,授权完成后跳转回宿主站,将签发的会话token存储在当前宿主站的第一方Cookie中,同时你的身份服务域名会留存用户的全局登录态。
当用户访问其他嵌入同款Widget的站点时,Widget会自动向你的身份服务发起静默授权请求:如果用户已经在身份服务域登录过,服务端会直接返回授权码,无需用户二次操作即可在当前宿主站生成有效会话,实现跨站登录态同步。
- 优势:完全规避第三方Cookie政策限制,全浏览器兼容,用户体验流畅无额外感知
- 注意事项:需为身份服务配置合理的CORS规则,授权流程全程加入CSRF校验避免攻击
2. Storage Access API 适配 + Iframe兼容方案
如果要复用原有iframe实现的Widget逻辑,可以适配浏览器原生的Storage Access API解决第三方Cookie读写限制。当用户首次在某个宿主站和iframe内的组件交互(如点击登录按钮)时,调用document.requestStorageAccess()接口向用户申请第三方存储权限,用户同意后iframe即可正常读写自身域名下的Cookie存储会话信息。后续用户访问其他嵌入同款iframe的站点时,只要已获取过存储权限,即可直接读取全局会话保持登录态。
- 优势:原有iframe逻辑改造量小,不需要重构核心登录流程
- 注意事项:主流现代浏览器均已支持该API,针对不支持的低版本浏览器可降级至第一种授权流方案
3. FedCM 联邦身份凭证管理方案
FedCM是W3C标准、浏览器原生支持的跨站身份管理API,是官方推出的第三方Cookie身份场景替代方案。你只需将自身的身份服务配置为FedCM的身份提供者(IdP),各宿主站嵌入的Widget直接调用FedCM接口,从浏览器的身份凭证库中拉取用户登录凭证,全程不依赖任何Cookie存储。用户只要在任意站点完成过一次登录,其他站点的Widget可直接获取有效凭证自动完成登录。
- 优势:完全不受Cookie政策约束,是未来跨站身份场景的主流实现方向
- 注意事项:部分低版本浏览器暂不支持,需做好降级兼容处理
4. 设备指纹绑定的无Cookie会话同步方案
如果需要最大化兼容所有浏览器版本,可采用设备指纹+一次性校验码的实现逻辑:用户首次登录时,服务端将用户会话与当前采集的设备指纹做绑定存储。当用户访问其他嵌入Widget的站点时,Widget先采集当前设备指纹发送到服务端查询是否存在绑定的有效会话,若存在则下发短期有效的一次性校验码,校验通过后即可在当前宿主站生成登录态,无需用户重新输入账号密码。
- 优势:兼容性最强,不受任何浏览器API和Cookie政策限制
- 注意事项:需优化设备指纹的准确率降低误判,同时做好校验码的安全防护,避免泄露被盗用
内容的提问来源于stack exchange,提问作者artooras

