Spring Security OAuth2 (一)之淺談OAuth2

我們在搭建一套系統(tǒng)的時候,在設(shè)想這套系統(tǒng)需要實現(xiàn)具體業(yè)務(wù)功能的同時,還需要選擇使用什么登陸安全框架?,F(xiàn)在有很多的授權(quán)方式,在java體系內(nèi)比較火的是shiro、seciruty,他們兩個都屬于比較輕量級,易于上手,比較靈活。這個時候我相信你們就會問那他們有什么區(qū)別,我們平時需要選擇哪個呢?OAuth2又是什么?他的作用是什么?要怎么用?

首先我們來講述大概介紹一下OAuth2。

oAuth2是一種授權(quán)協(xié)議。它主要是為了簡化客戶端開發(fā)人員的工作,同時為需要授權(quán)的服務(wù)提供授權(quán)流程,主要包括網(wǎng)站、桌面、app、小程序等。 我從官網(wǎng)把它幾種授權(quán)模式搬過來了:

  1. 授權(quán)碼(Authorization Code)

    機(jī)密和公共客戶端使用授權(quán)碼授予類型來交換訪問令牌的授權(quán)碼。
    用戶通過重定向URL返回到客戶端后,應(yīng)用程序?qū)腢RL獲得授權(quán)代碼,并使用它來請求訪問令牌。

  2. 客戶憑證(Client Credentials)

    客戶端使用“客戶端證書”授予類型來獲取用戶上下文之外的訪問令牌??蛻舳送ǔJ褂盟鼇碓L問有關(guān)其自身的資源,而不是訪問用戶的資源。

  3. 設(shè)備代碼(Device Code)

    設(shè)備流中的無瀏覽器或受輸入限制的設(shè)備使用設(shè)備代碼授權(quán)類型,以將先前獲得的設(shè)備代碼交換為訪問令牌。設(shè)備代碼授權(quán)類型值為urn:ietf:params:oauth:grant-type:device_code。

  4. 刷新令牌(Refresh Token)

    當(dāng)訪問令牌過期時,客戶端使用“刷新令牌”授予類型來將刷新令牌交換為訪問令牌。這允許客戶端繼續(xù)具有有效的訪問令牌,而無需與用戶進(jìn)行進(jìn)一步的交互。

  5. 密碼授權(quán)(Implicit Flow)

    密碼授予類型是一種將用戶憑據(jù)交換為訪問令牌的方式。因為客戶端應(yīng)用程序必須收集用戶的密碼并將其發(fā)送到授權(quán)服務(wù)器,所以不建議再使用此授權(quán)。該流程沒有為多因素身份驗證或委托帳戶之類的機(jī)制提供任何機(jī)制,因此在實踐中是相當(dāng)有限的。

    最新的OAuth 2.0安全性最佳最新實踐完全禁止密碼授予。

  6. 隱式流(Password Grant)

    Implicit流是先前為本機(jī)應(yīng)用程序和JavaScript應(yīng)用程序推薦的簡化的OAuth流,其中本機(jī)訪問令牌無需額外的授權(quán)代碼交換步驟即可立即返回訪問令牌。不建議使用隱式流(有些服務(wù)器完全禁止該流),因為在HTTP重定向中返回訪問令牌而未確認(rèn)客戶端已收到訪問令牌的固有風(fēng)險。公共客戶端(例如本機(jī)應(yīng)用程序和JavaScript應(yīng)用程序)現(xiàn)在應(yīng)該使用帶有PKCE擴(kuò)展名的授權(quán)代碼流。

    其中密碼授權(quán)及隱式流兩種模式在OAuth官網(wǎng)中是已經(jīng)屬于遺留模式,不在推薦了。但是我的Spring Security OAuth2系列文章主要講述的將是密碼模式,不要問我為啥?因為我是需要去解決我們現(xiàn)有框架中的登陸問題。所以我會著重密碼模式!

個人理解的OAuth2

直到我寫到這里,可能我才對OAuth2有了更新的一個認(rèn)識!根據(jù)官方介紹OAuth2應(yīng)該是一個第三方授權(quán)機(jī)制,即有點類似于是一個能提供公共授權(quán)機(jī)制的模塊。因此在現(xiàn)實中這個授權(quán)模塊應(yīng)該具有相對的權(quán)威性,又或者說在一個范圍內(nèi)的應(yīng)用程序,可以去請求同一個授權(quán)模塊進(jìn)行使用。
那這個授權(quán)模塊是不是也應(yīng)該是一個至少擁有用戶管理功能的信息系統(tǒng),能夠進(jìn)行身份授權(quán),授權(quán)后授權(quán)模塊允許這個賬號可以使用某些功能。
但是問題來了,我在文章開頭寫了我們主要是搭建我們系統(tǒng)的登陸模塊,暫時未用到對第三方應(yīng)用授權(quán)。我們在這個系統(tǒng)中是否有必要引入OAuth2的授權(quán)機(jī)制?

總結(jié):

說實話寫到上一行,我停下來想了十分鐘。我在本文中提到的系統(tǒng)屬于我們的核心系統(tǒng),包括整個公司的核心業(yè)務(wù)功能都在上面。如果以后我們在擴(kuò)展其他應(yīng)用時,是需要用到第三方授權(quán)的,不然就需要在每個應(yīng)用中都去維護(hù)一套系統(tǒng)用戶了。而且我們通過OAuth2也可以登陸本系統(tǒng)的,所以使用OAuth2.0是完全沒有問題的。

文章中也提到了OAuth2.0是授權(quán)機(jī)制,具體的功能實現(xiàn)還需要去完成!下一篇文章將講述Spring Security。文章中內(nèi)容純屬本人個人理解,如果有覺得不對的地方,請多多指教!

文章內(nèi)容僅屬于作者的個人理解,本人主要為了記錄開發(fā)過程中用到的技術(shù)以及與遇到的問題!如果大家感興趣歡迎關(guān)注!也可以搜索公眾號“程序者”!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容