單點登錄
單點登錄(SSO - Single Sign On):對於同一個客戶端(例如 Chrome 瀏覽器),只要登錄了一個子站(例如 a.com),則所有子站(b.com、c.com)都認為已經登錄。
比如用戶在登錄淘寶后,跳轉到天貓時就已經登錄了。
用例步驟
-
未登錄用戶訪問子站 a.com 進行登錄,自動跳轉到賬戶中心的統一登錄頁
account.com/login
-
用戶在統一登錄頁進行登錄,登錄成功后顯示登錄跳轉頁
-
顯示登錄跳轉頁后自動跳轉回 a.com,單點登錄完成
-
用戶在訪問 b.com 時無需再次登錄
實現原理
登錄
-
統一登錄頁登錄請求完成后響應為登錄跳轉頁
-
登錄跳轉頁中通知各子站進行登錄
- 子站收到登錄請求后驗證 token 是否有效,有效的話在響應中設置 cookie(user_token=xxxx)
<script src='b.com/login?uid=xxxx&token=xxxxx'></script>
<script src='c.com/login?uid=xxxx&token=xxxxx'></script
token 驗證
-
賬戶中心使用私鑰加密 user id,生成 token
-
子站使用公鑰解密 token,將得到的 user id 和參數 uid 對比,如果一樣就是校驗通過
登出
-
用戶在某個子站主動登出時跳轉到賬戶中心統一登出頁
account.com/logout?uid=xxxx&token=xxxx
-
賬戶中心驗證 token 后進行登出,在登出跳轉頁中通知各子站進行登出(設置 cookie),類似登錄通知
-
子站收到登出請求后驗證 token 是否有效,有效的話在響應中設置 cookie(刪除 user_token)
關鍵點
-
瀏覽器渲染登錄跳轉頁時將執行上面用
<script>
發送的登錄通知請求,執行完后(或者超時)才跳轉回前面登錄的子站 -
登錄通知請求是跨域的(當前域是賬戶中心 account.com),所以在響應中設置 cookie 時 IE 某些版本需要設置 P3P 頭
-
在驗證 token 時可以考慮使用賬戶中心提供高性能的驗證接口,子站進行調用
轉載於:https://blog.51cto.com/suiwnet/1656588