1
背景介紹? ? ? ?
隨著業務與技術的發展,現今比以往任何時候都更需要單點登錄 SSO 身份驗證。
現在幾乎每個網站都需要某種形式的身份驗證才能訪問其功能和內容。
隨著網站和服務數量的增加,集中登錄系統已成為一種必要。
在本文中,我們將討論下?SSO 身份驗證的方案演進。
2
問題描述? ? ? ?
開發團隊遲早會面臨一個問題,已經開發了?網站 A,新開發的?網站 B 希望使用?網站 A 的登錄信息,而不是使用一套新的登錄信息,如下圖所示:
事實上,你可能還希望已經在 網站 A 登錄的用戶自動完成?網站 B 的登錄。
問題的解決方案顯然是實現跨不同域之間共享會話信息。
但是,由于安全原因,瀏覽器會強制執行同源策略 - Same Origin Policy。
該策略規定,Cookies 只能由其創建者訪問。
換句話說,如果 網站 A 和 網站 B 不是同域,網站 B 無法訪問?網站 A 的 Cookies,反之亦然,如下圖所示:
SSO 其實就是要以某種方式解決不同域之間共享會話信息。
3
解決方案? ? ? ?
一、同源解決方案
要解決不同域之間共享會話信息,一個最簡單粗暴的辦法就是讓網站同域,如下圖所示:
1. 用戶瀏覽 網站 A
2. 網站 A 發現無?*.domain.com 的?Cookies,重定向到認證中心
3.?認證中心要求用戶使用賬號密碼登錄
4.?認證中心保存 Cookies 到 *.domain.com
5.?重定向返回?網站 A
6. 網站 A 讀取?*.domain.com 下的 Cookies 完成校驗,展示網站內容
7. 用戶瀏覽?網站 B
8. 網站 B 讀取?*.domain.com 下的 Cookies 完成校驗,展示網站內容
二、非同源解決方案
同源的解決方案可以滿足大部分場景,但是針對一些多產品的場景,比如,阿里巴巴有天貓和淘寶兩個產品,同源解決方案顯然不能滿足需求。
不同的 SSO 協議以不同的方式共享會話信息,但基本概念是相同的:有一個認證中心,執行身份驗證,然后以某種方式與其他域共享會話信息。
其中一種方式是使用 JWT - JSON Web Token,認證中心使用 JWE - JSON Web Encryption 對用戶信息進行加密,生成 JWT。
然后通過重定向的方式,把 Token 傳回原始站點,Token 包含需要驗證用戶所需的所有信息。
由于 Token 是使用 JWT 加密的,除了認證中心外無法以任何方式修改它,具體流程如下:
1. 用戶瀏覽 網站 A
2. 網站 A 發現無 domain1.com 的 Cookies,重定向到認證中心
3.?認證中心要求用戶使用賬號密碼登錄
4.?認證中心保存 Cookies 到 auth.com
5.?重定向返回?網站 A 并在 URL 攜帶驗證用戶信息的 Token
6. 網站 A?校驗 Token 完成驗證
7. 網站 A 保存 Cookies 到?domain1.com,供后續驗證使用,并顯示網站內容
8.?用戶瀏覽?網站 B
9.?網站 B 發現無 domain2.com 的 Cookies,重定向到認證中心
10. 認證中心發現有 auth.com 的 Cookies,對 Cookies 進行校驗
11.?重定向返回?網站 B 并在 URL 攜帶驗證用戶信息的 Token
12.?網站 B 校驗 Token 完成驗證
13.?網站 B 保存 Cookies 到?domain2.com,供后續驗證使用,并顯示網站內容
4
總結歸納? ? ? ?
以上就是本文需要介紹的 SSO 相關內容,大家有問題的話歡迎在文章或者在公眾號 - 跬步之巔留言交流。