一、什么是單點登錄?
單點登錄(Single Sign On),簡稱為 SSO,是比較流行的企業業務整合的解決方案之一。SSO 的定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。---- 《百度百科》
換而言之,在公司業務逐漸壯大的過程中,開發了很多的子系統。每個子系統都有自己的用戶的登錄、注冊模塊,為了能夠在公司內部統一用戶登錄授權功能,誕生了一個統一的用戶登錄認證系統,這個系統就可以稱之為單點登錄系統。
二、什么是 OAuth2.0 協議?
OAuth 是一個關於授權(authorization)的開放網絡標准,在全世界得到廣泛應用,目前的版本是2.0版。主要是用於在第三方平台上進行的用戶授權,常見的一些場景,例如:QQ、微博、微信的授權登錄。第三方開發平台的授權接入,例如:Shopify、速賣通、亞馬遜等。
三、單點登錄解決什么問題?
假設,當我們的 ERP 系統功能模塊越來越多的時候,后期可能會拆分出產品庫存系統、財務系統、訂單系統、工單系統等,那是不是意味着每個系統都需要開發一套登錄注冊功能呢?如果每個系統有一套自己的用戶體系,就會出現用戶在使用的時候,需要重復注冊、重復登錄、重復記住對應的賬號密碼,一旦子系統多達十幾個的時候,對於用戶來說這種情況,顯然是不能接受的。
其次對應我們開發人員來說,很顯然也不可能每個系統開發一套相同的功能,因此我們需要有一套能夠統一登錄、注冊、用戶管理、權限等功能的系統。那么這樣一套系統就是,今天要分享的單點登錄系統。單點登錄系統,能夠讓我們只需擁有一個賬號,便可以訪問任意的子系統,類似於我們擁有了一張通行證,行便天下,暢通無阻。
四、單點登錄交互時序圖
五、案例演示
1、授權界面
2、系統地址
SSO 系統:http://www.sso.com/
A 業務系統:http://www.a.com
B 業務系統:http://www.b.com
3、關鍵代碼
六、Ouath 2.0 授權模式的參數說明
1、客戶端傳遞的參數
參數 | 描述 |
---|---|
response_type | 表示授權類型,必選項,此處的值固定為"code" |
client_id | 表示客戶端的ID,必選項 |
redirect_uri | 表示重定向URL,可選項 |
scope | 表示申請的權限范圍,可選項 |
state | 表示客戶端的當前狀態,可以指定任意值,認證服務器會原封不動地返回這個值。 |
2、授權系統回調給客戶端的參數
參數 | 描述 |
---|---|
code | 表示授權碼,必選項。 |
state | 如果客戶端的請求中包含這個參數,認證服務器的回應也必須一模一樣包含這個參數。 |
3、客戶端向授權系統申請 Token 所需參數
參數 | 描述 |
---|---|
grant_type | 表示使用的授權模式,必選項,此處的值固定為"authorization_code"。 |
code | 表示獲得的授權碼,必選項。 |
redirect_uri | 表示重定向URI,必選項,且必須與上面中的該參數值保持一致。 |
client_id | 表示客戶端ID,必選項。 |
client_secret | 表示客戶端密鑰,必選項。 |
4、授權系統返回給客戶端的參數
參數 | 描述 |
---|---|
access_token | 表示訪問令牌,必選項。 |
token_type | 表示令牌類型,該值大小寫不敏感,必選項,可以是bearer類型或mac類型。 |
expires_in | 表示過期時間,單位為秒。如果省略該參數,必須其他方式設置過期時間。 |
refresh_token | 表示更新令牌,用來獲取下一次的訪問令牌,可選項。 |
scope | 表示權限范圍,如果與客戶端申請的范圍一致,此項可省略。 |
七、總結
單點登錄系統旨在打通各個子系統的用戶體系,實現多場景下的免登。同時,企業內部也統一了賬號體系,實現了用戶數據的聚合。減少了用戶的反復登錄,提升了產品的體驗。從系統的層面,減少了系統的重復建設,降低了研發成本。從安全層面,統一管理用戶賬號,提升了用戶賬號及權限的安全性。
本次分享的主要目的,旨在讓大家了解單點登錄的思想,以及 Ouath2.0 協議在實際場景中的應用。單點登錄只是一種解決問題的手段或技術解決方案,Oauth2.0 協議是一套授權的標准。那么單點登錄系統,就是這兩者的結合。附代碼 https://github.com/yxhsea/single-point.git