目錄
- 概念
- 好處
- 使用者角度
- 系統管理者角度
- 新系統開發角度
- 技術實作
- 流程圖
- 流程介紹
- 對外接口
- 登入
- 退出
- Token 生成方式
- 小結
- 擴充
- SSO與OAuth的差別
- SSO與RBAC的關系
SSO 英文全稱 Single Sign On,單點登入。
在多個應用系統中,隻需要登入一次,就可以通路其他互相信任的應用系統。
比如:淘寶網(www.taobao.com),天貓網(www.tmall.com),聚劃算(ju.taobao.com),飛豬網(www.fliggy.com)等,這些都是阿裡巴巴集團的網站。在這些網站中,我們在其中一個網站登入了,再通路其他的網站時,就無需再進行登入,這就是 SSO 的主要用途。
使用者能夠做到一次登入多次使用,無需記錄多套使用者名和密碼,省心。
管理者隻需維護好一個統一的賬号中心就可以了,友善。
新系統開發時隻需直接對接統一的賬号中心即可,簡化開發流程,省時。

如果沒這個介紹,看上圖肯定是懵懵的。
系統A和系統B都是前後端分離的,比如前端架構用的 React / Vue / Angular,都是通過 NPM 編譯後獨立部署的,前後端完全通過HTTP接口的方式進行互動,也有可能前後端項目的域名都不一樣。
SSO認證中心不是前後端分離的,就是前端代碼和後端代碼部署在一個項目中。
為什麼用這兩種情況呢?
其實就是為了,在流程圖上出現這兩種情況,這樣的清楚了,後期改成任何一種就都清楚了。
試想一下:
三個系統都是前後端分離的情況,流程圖應該怎麼調整?
三個系統都不是前後端分離的情況,流程圖應該怎麼調整?
系統A和系統B:使用者退出接口。
SSO 認證中心:使用者退出接口和token驗證接口。
如上述流程圖一緻。
系統A和系統B:使用token認證登入。
SSO 認證中心:使用會話認證登入。
前後端分離項目,登入使用token進行解決,前端每次請求接口時都必須傳遞token參數。
上圖,表示的是從某一個系統退出的流程圖。
退出,還可以從SSO認證中心退出,然後調取各個系統的使用者退出接口。
當使用者再進行操作的時候,就會跳轉到SSO的登入界面。
建立全局會話可以使用session,将session存儲到redis中。
令牌的生成可以使用JWT。
PHP JWT參考位址:https://github.com/lcobucci/jwt
當然還可以自定義token的生成方式。
講解了什麼是SSO,以及SSO的用途與好處,同時根據流程圖一步步進行梳理,基本上就可以實作了。
期間遇到任何問題,都可以關注公衆号和我進行交流。
談到SSO很多人就想到OAuth,也有談到OAuth想到SSO的,在這裡我簡單的說一下差別。
通俗的解釋,SSO是處理一個公司内的不同應用系統之間的登入問題,比如阿裡巴巴旗下有很多應用系統,我們隻需要登入一個系統就可以實作不同系統之間的跳轉。
OAuth是不同公司遵循的一種授權方案,也是一種授權協定,通常都是由大公司提供,比如騰訊,微網誌。我們常用的QQ登入,微網誌登入等,使用OAuth的好處是可以使用其他第三方賬号進行登入系統,減少了因使用者懶,不願注冊而導緻使用者流失的風險。
現在一些支付業務也用OAuth,比如微信支付,支付寶支付。
還有一些開放平台也用OAuth,比如百度開放平台,騰訊開放平台。
如果企業有多個管理系統,現由原來的每個系統都有一個登入,調整為統一登入認證。
那麼每個管理系統都有權限控制,吸取統一登入認證的經驗,我們也可以做一套統一的RBAC權限認證。
本文歡迎轉發,轉發請注明作者和出處,謝謝!
作者:新亮筆記(關注公衆号,可申請添加微信好友)
出處:https://www.cnblogs.com/xinliangcoder
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。