跨域名登陸態傳遞

不少互聯網公司會有多個域名。這多是由於公司併購,好比百度持有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

相關文章
相關標籤/搜索