本文主要對 SpringSecurity Oauth 2.0
用戶認(rèn)證,授權(quán)碼授權(quán)模式、密碼授權(quán)模式,以及授權(quán)流程進(jìn)行講解
1. 用戶認(rèn)證方式
1.1 用戶認(rèn)證
開發(fā)中,有些功能只有管理員才有,普通用戶是沒有的。即需要對用戶的身份進(jìn)行認(rèn)證,是管理員還是普通用戶。認(rèn)證方式有兩種:
-
身份認(rèn)證:
- 用戶在訪問相應(yīng)資源時對用戶的身份信息進(jìn)行驗證,身份合法才可以繼續(xù)訪問。
- 常見用戶認(rèn)證方式:用戶密碼登錄,指紋打卡。簡單來說就是校驗用戶賬號密碼是否正確。
-
用戶授權(quán):
- 用戶認(rèn)證通過后,系統(tǒng)會判斷用戶是否擁有訪問資源的權(quán)限,只允許訪問有權(quán)限的資源系統(tǒng),沒有權(quán)限的無法訪問,這個過程叫用戶授權(quán)(鑒定角色)。
因而用戶認(rèn)證(登錄)成功后還需要鑒權(quán),判斷用戶是否有權(quán)限訪問相應(yīng)資源。
1.2 單點(diǎn)登錄認(rèn)證
- 單點(diǎn)登錄(Single Sign On),簡稱 SSO 。
- 用戶在訪問每個微服務(wù)時,都需要驗證身份信息,如果每一個微服務(wù)都登錄一次就太麻煩了。因而用戶在一個微服務(wù)系統(tǒng)中登錄后,不用登錄也可以訪問其他微服務(wù),這個功能就叫單點(diǎn)登錄 。
- 簡單來說就是用戶只需要登錄一個微服務(wù)系統(tǒng)就可以免登錄訪問其他微服務(wù)系統(tǒng)。
1.3 第三方賬號登錄認(rèn)證
很多項目中,我們都可以使用第三方QQ、微信等平臺賬號登錄,用戶通過一個賬號就可以登錄很多平臺,十分便利。
1.4 第三方認(rèn)證原理
當(dāng)需要訪問第三方系統(tǒng)的資源時,首先需要通過第三方的認(rèn)證(比如:微信認(rèn)證),由第三方系統(tǒng)對用戶認(rèn)證。若認(rèn)證通過則允許訪問相應(yīng)資源。
如下圖,當(dāng)用戶在訪問搶單頁面時,需要先通過微信登錄進(jìn)行身份認(rèn)證,認(rèn)證通過才允許搶單。
2. 認(rèn)證技術(shù)解決方案
2.1 單點(diǎn)登錄解決方案
分布式系統(tǒng)要實現(xiàn)單點(diǎn)登錄,通常將認(rèn)證系統(tǒng)獨(dú)立抽取出來作為用戶登錄和授權(quán)使用,并且將用戶身份信息存儲在單獨(dú)的存儲介質(zhì),比如:MySQL、Redis,出于對性能的考慮通常放在Redis中。
如下圖,我們將暢購認(rèn)證系統(tǒng)作為單點(diǎn)登錄用戶認(rèn)證系統(tǒng),用戶通過該系統(tǒng)登錄,系統(tǒng)會返回一個token給用戶,同時存儲一份到Redis中,用戶每次訪問其他微服務(wù)都會攜帶token,微服務(wù)會調(diào)用暢購認(rèn)證服務(wù)驗證token權(quán)限,暢購認(rèn)證服務(wù)通過查詢Redis中有沒有改token完成認(rèn)證,若認(rèn)證通過則允許用戶訪問。
Java中還有很多用戶認(rèn)證的框架都可以實現(xiàn)單點(diǎn)登錄:
- Apache Shiro
- CAS
- Spring security CAS
- Oauth2(可以實現(xiàn)單點(diǎn)登錄 和 第三方認(rèn)證)
單點(diǎn)登錄特點(diǎn):
- 認(rèn)證系統(tǒng)為獨(dú)立的系統(tǒng)。
- 各個子系統(tǒng)通過HTTP或其他協(xié)議與認(rèn)證系統(tǒng)通信,完成用戶認(rèn)證。
- 用戶身份信息存儲在Redis集群中。
2.2 Oauth 2 認(rèn)證
- Oauth(開放授權(quán))是一個開放標(biāo)準(zhǔn),即不管是否受信任的服務(wù)都可以訪問。
- 允許用戶授權(quán)第三方移動應(yīng)用訪問它們存儲在另外的服務(wù)器上的信息,并且不需要提供賬號密碼就可以獲取。也就是用戶不需要在當(dāng)前系統(tǒng)中用系統(tǒng)賬號登錄,當(dāng)前系統(tǒng)就可以獲取用戶的微信賬號信息(頭像、用戶名等)。
2.3 Oauth 2 認(rèn)證原理
授權(quán)碼模式授權(quán):
- 用戶通過第三方賬號登錄當(dāng)前系統(tǒng),用戶授權(quán)允許當(dāng)前系統(tǒng)使用第三方賬號登錄當(dāng)前系統(tǒng),
- 第三方賬號平臺會創(chuàng)建一個授權(quán)碼返回給當(dāng)前系統(tǒng),當(dāng)前系統(tǒng)通過授權(quán)碼去第三方賬號平臺申請token,
- 用戶每次訪問的時候相應(yīng)頁面的時候,系統(tǒng)會攜帶令牌到第三方服務(wù)中認(rèn)證用戶令牌,認(rèn)證通過才允許訪問。
密碼授權(quán)模式和授權(quán)碼原理差不多,只不過需要賬號密碼登錄。
2.4 微服務(wù)環(huán)境Oauth 2 實現(xiàn)
3. 公鑰私鑰
每個用戶都有一個公鑰和私鑰:文章來源:http://www.zghlxwxcb.cn/news/detail-400787.html
- 公鑰加密
- 私鑰解密
用戶可以將自己的公鑰給別人(私鑰不會給別人),別人通過公鑰加密信息,傳給自己,自己通過私鑰解密。保證數(shù)據(jù)的安全性。文章來源地址http://www.zghlxwxcb.cn/news/detail-400787.html
到了這里,關(guān)于【Oauth2.0 單點(diǎn)登錄 + 第三方授權(quán)認(rèn)證】用戶認(rèn)證、授權(quán)模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!