單點登入(SSO)的設計與實現

2021-10-11 08:25:52 字數 1193 閱讀 5956

sso英文全稱single sign on,單點登入。sso是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。

例如訪問在網易賬號中心( )登入之後

訪問以下站點都是登入狀態

本篇文章也主要是為了**如何設計&實現乙個sso系統

以下為需要實現的核心功能:

應用/模組/物件

說明前台站點

需要登入的站點

sso站點-登入

提供登入的頁面

sso站點-登出

提供登出登入的入口

sso服務-登入

提供登入服務

sso服務-登入狀態

提供登入狀態校驗/登入資訊查詢的服務

sso服務-登出

提供使用者登出登入的服務

資料庫儲存使用者賬戶資訊

快取儲存使用者的登入資訊,通常使用redis

對於登入資訊的儲存,建議採用redis,使用redis集群來儲存登入資訊,既可以保證高可用,又可以線性擴充。同時也可以讓sso服務滿足負載均衡/可伸縮的需求。

物件說明

authtoken

直接使用uuid/guid即可,如果有驗證authtoken合法性需求,可以將username+時間戳加密生成,服務端解密之後驗證合法性

登入資訊

通常是將userid,username快取起來

按照上圖,使用者登入後authtoken儲存在cookie中。 domian= test. com

瀏覽器會將domain設定成 .test.com,

這樣訪問所有*.test.com的web站點,都會將authtoken攜帶到伺服器端。

然後通過sso服務,完成對使用者狀態的校驗/使用者登入資訊的獲取

使用者登出時要做的事情很簡單:

服務端清除快取(redis)中的登入狀態

客戶端清除儲存的authtoken

前面提到過,核心思路是客戶端儲存authtoken,伺服器端通過redis儲存登入資訊。由於客戶端是將authtoken儲存在cookie中的。所以跨域要解決的問題,就是如何解決cookie的跨域讀寫問題。

解決跨域的核心思路就是:

時序圖中並沒有包含所有場景,ken.io只列舉了核心/主要場景,另外對於一些不影響理解思路的訊息能省就省了。

sso 登出 單點登入(SSO)的設計與實現

sso英文全稱single sign on,單點登入。sso是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。例如訪問在網易賬號中心 登入之後 訪問以下站點都是登入狀態 本篇文章也主要是為了 如何設計 實現乙個sso系統 以下為需要實現的核心功能 對於登入資訊的儲存,建議採用...

SSO(單點登入)介紹設計與實現

sso英文全稱single signon,單點登入。sso是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。它包括可以將這次主要的登入對映到其他應用中用於同乙個使用者的登入的機制。當使用者第一次訪問應用系統1的時候,因為還沒有登入,會被引導到認證系統中進行登入 根據使用者提供...

PHP實現sso單點登入

單點登入的解釋 單點登入 single sign on 簡稱為 sso,是目前比較流行的企業業務整合的解決方案之一。sso的定義是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。server端 共享cookie 即共享session的方式,本質上cookie只是儲存sessi...