跨域名登陆态传递

不少互联网公司会有多个域名。这多是由于公司并购,好比百度持有baidu.com、nuomi.com、qianqian.com等;也多是为不一样业务启用了不一样的域名,好比阿里持有taobao.com、tmall.com等。git

若是咱们将用来实现登陆接口的域名称之为主域名,其它域名称之为从域名,好比对百度来说主域名是baidu.com,对阿里来说主域名是taobao.com。那么用户在主域名登陆后,自动将登陆态同步到从域名,就成为一个很天然的需求。本文介绍如何安全高效地实现这种跨域名的登陆态传递。github

约束

  1. 浏览器安全策略不容许跨域种cookie;
  2. 部分浏览器(safari、firefox)默认禁止第三方cookie;
  3. web端登陆态标识(authcookie)在存储和传输时,不该该出如今cookie之外的任何地方,应设置cookie属性httponly为true;

基于push的方案

所谓push指的是主域名登陆后,在主域名的页面下经过访问从域名的sso接口种cookie,将登陆态“推送”到从域名;web

主域名登陆后,访问主域名sso接口获取token,而后将token拼接到query string中访问从域名下的sso接口,从域名的sso接口验证token并其对应的登陆态标识种到从域名下的cookie中。跨域

CrossDomainSSOPush

须要注意的是,因为约束2的存在,访问从域名的sso接口时,除非跳转页面或弹窗,不然在safari和firefox下因种三方cookie的行为被禁止,登陆态没法传递成功;浏览器

基于pull的方案

pull指的是访问从域名的页面时,可访问主域名的sso接口,该接口依据主域名的登陆态建立sso token,随后校验referer再跳转到对应从域名的sso接口。从域名的sso接口验证token并其对应的登陆态标识种到从域名下的cookie中。这样就实现了将主域名的登陆态“拉取”到了从域名下。安全

CrossDomainSSOPull

pull方案能够知足本文开头提出的三个约束,缺点是非登陆相关页面也将包含登陆态传递逻辑。cookie

总结

跨域名sso主要涉及到一些cookie的知识点,不清楚的能够看这篇文章。建议同时实现push和pull两种方案。firefox

相关文章
相关标签/搜索