跨域名登錄態傳遞


很多互聯網公司會有多個域名。這可能是因為公司並購,比如百度持有baidu.com、nuomi.com、qianqian.com等;也可能是為不同業務啟用了不同的域名,比如阿里持有taobao.com、tmall.com等。

如果我們將用來實現登錄接口的域名稱之為主域名,其它域名稱之為從域名,比如對百度來講主域名是baidu.com,對阿里來講主域名是taobao.com。那么用戶在主域名登錄后,自動將登錄態同步到從域名,就成為一個很自然的需求。本文介紹如何安全高效地實現這種跨域名的登錄態傳遞。

約束

  1. 瀏覽器安全策略不允許跨域種cookie;
  2. 部分瀏覽器(safari、firefox)默認禁止第三方cookie;
  3. web端登錄態標識(authcookie)在存儲和傳輸時,不應該出現在cookie以外的任何地方,應設置cookie屬性httponly為true;

基於push的方案

所謂push指的是主域名登錄后,在主域名的頁面下通過訪問從域名的sso接口種cookie,將登錄態“推送”到從域名;

主域名登錄后,訪問主域名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方案可以滿足本文開頭提出的三個約束,缺點是非登錄相關頁面也將包含登錄態傳遞邏輯。

總結

跨域名sso主要涉及到一些cookie的知識點,不清楚的可以看這篇文章。建議同時實現push和pull兩種方案。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM