單點登入落地實現技術有哪些,有哪些流行的登入方案搭配?
實現單點登入說到底就是要解決如何產生和儲存那個信任,再就是其他系統如何驗證這個信任的有效
性,因此要點也就以下兩個:1、儲存信任 ;2、伺服器生產~驗證信任 ; 3、拿到伺服器再次驗證。
單點登入的常見落地實現技術有哪些?
身份認證技術:
1. cas(單點登入)
2. Spring Security OAuth2(第三方登入授權:QQ登陸)
3. jwt (客戶端token:原生)
安全控制框架:
1. spring-security
2. shiro:
cas(單點登入)
解決問題:多個系統只需登入一次,無需重複登入
原理:授權伺服器,被授權客戶端 CS架構
1. 授權伺服器(一個)儲存了全域性的一份session,客戶端(多個)各自儲存自己的session
2. 客戶端登入時判斷自己的session是否已登入,若未登入,則(告訴瀏覽器)重定向到授權伺服器
(引數帶上自己的地址,用於回撥)
3. 授權伺服器判斷全域性的session是否已登入,若未登入則定向到登入頁面,提示使用者登入,登入成
功後,授權伺服器重定向到客戶端(引數帶上ticket【一個憑證號】)
4. 客戶端收到ticket後,請求伺服器獲取使用者資訊
5. 伺服器同意客戶端授權後,服務端儲存使用者資訊至全域性session,客戶端將使用者儲存至本地session
6. 預設不支援http請求, 僅支援https 。 生成證書 keytools
缺點:cas單點登入技術適用於傳統應用的場景比較多, 官方示例也是以javaWeb為準, 對微服務化應
用,前後端分離應用,支援性較差。
oauth2(第三方登入授權)
解決問題:第三方系統訪問主系統資源,使用者無需將在主系統的賬號告知第三方,只需通過主系統的授
權,第三方就可使用主系統的資源
如:APP1需使用微信支付,微信支付會提示使用者是否授權:取消,使用者授權後,APP1就可使用微信支
付功能了。
OAuth2是用來允許使用者授權第三方應用訪問他在另一個伺服器上的資源的一種協議,它不是用來做單
點登入的,但我們可以利用它來實現單點登入。
原理:主系統,授權系統(給主系統授權用的,也可以跟主系統是同一個系統),第三方系統。
1. 第三方系統需要使用主系統的資源,第三方重定向到授權系統
2. 根據不同的授權方式,授權系統提示使用者授權
3. 使用者授權後,授權系統返回一個授權憑證(accessToken)給第三方系統【accessToken是有有效
期的】
4. 第三方使用accessToken訪問主系統資源【accessToken失效後,第三方需重新請求授權系統,以
獲取新的accessToken】
Resource Server: 被授權訪問的資源
Authotization Server:OAUTH2認證授權中心
Resource owner : 資源擁有者
Client:使用API的客戶端(如Android 、IOS、web app)
jwt (客戶端token)
難度較大,需要你瞭解很多協議~
Json web token (JWT),是為了在網路應用環境間傳遞宣告而執行的一種基於JSON的開放標準((RFC
7519).
該token被設計為緊湊且安全的,特別適用於分散式站點的單點登入(SSO)場景。JWT的宣告一般被用
來在身份提供者和服務提供者間傳遞被認證的使用者身份資訊,以便於從資源伺服器獲取資源,也可以增
加一些額外的其它業務邏輯所必須的宣告資訊,該token也可直接被用於認證,也可被加密。
基於JWT認證協議,自己開發SSO服務和許可權控制。
SpringSecurity
springSecurity 是spring家族的安全控制框架, 功能非常完善。
Spring Security是能夠為J2EE專案提供綜合性的安全訪問控制解決方案的安全框架。
它依賴於Servlet過濾器。這些過濾器攔截進入請求,並且在應用程式處理該請求之前進行某些安全處
理。
Shiro
spring-boot-starter-springsecurity
特徵 spring-security + oauth2 shiro + cas jwt
依賴 jdk、jwt、redis redis、jdk、jwt --
自定義
許可權
支援,使用者登入後將使用者的許可權列表
寫入認證伺服器
支援 , 使用者登入後將使用者
的許可權列表寫入客戶端 支援
認證服
務叢集 -- CAS支援 支援
共享
session
支援 支援 支援
前後端
分離 支援,引數始終攜帶access_token
支援不夠友好,需要改造
CAS服務端 支援
Apache Shiro 是一個強大而靈活的開源安全框架,它乾淨利落地處理身份認證,授權,企業會話管理
和加密。
以下是 Apache Shiro 可以做的事情:
1. 驗證使用者來核實他們的身份
2. 對使用者執行訪問控制
3. 判斷使用者是否被分配了一個確定的安全形色
4. 判斷使用者是否被允許做某事
5. 在任何環境下使用 Session API,即使沒有 Web 或 EJB 容器。
6. 在身份驗證,訪問控制期間或在會話的生命週期,對事件作出反應。
7. 聚集一個或多個使用者安全資料的資料來源,並作為一個單一的複合使用者“檢視”。
8. 啟用單點登入(SSO)功能。內建了jasig-cas
9. 為沒有關聯到登入的使用者啟用"Remember Me"服務。
市面主流的技術搭配
搭配方案一
搭配方案二
技術人員態度: 通吃才對!大家覺得這個課程對大家有幫助嗎?敬請關注,下一個文章告訴大傢俱體的程式碼實現方案!