基於 OAuth2.0 協議的單點登錄系統方案設計


一、什么是單點登錄?

單點登錄(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


免責聲明!

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



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