【spring Security】Security、oauth、JWT關系梳理


Security

Security是spring提供的一個高度自定義的安全框架,為系統提供了安全訪問控制功能。簡化了認證授權及系統安全管理。

Security使用了責任鏈的設計模式,他提供了一個非常長的過濾器鏈完成完成認證、授權、鑒權的相關操作。

oauth

oauth是一套關於認證授權的協議,是一種規范,spring-security-oauth是對oauth規范的一種實現。

oauth保證了訪問資源的安全性以及靈活性。他允許用戶不把某系統的賬號密碼提供給第三方,第三方就能訪問到此用戶該系統上的信息,使第三方應用可以更安全的訪問資源。

oauth流程

oauth在 客戶端 與 資源服務 之間設置了一個 授權層 。使客戶端不能直接訪問 資源服務 ,而需要 客戶端 經過用戶同意授權之后在授權層拿到令牌token,使用token訪問 資源服務 。授權層在頒發token的時候可以指定token的授權范圍以及有效時間。使用token只能訪問規定的范圍內的資源。

流程圖:

(A)客戶端請求用戶授權

(B)用戶同意客戶端的授權請求

(C)客戶端使用用戶授權請求 授權服務器

(D)授權服務器延華智能成功之后頒發令牌 access token

(E)客戶端使用 access token 請求資源服務

(F)資源服務器校驗token做出響應

對於客戶端的授權流程oauth2.0定義了四種授權模式

    • 授權碼模式
    • 隱式模式
    • 密碼模式
    • 客戶端模式

授權碼模式

授權碼模式是最嚴密最復雜最安全的授權模式。

前提:

需要在授權服務器上提前定義好客戶端的 客戶端ID(client_id) 、 客戶端秘鑰(client_secret)、回調地址(redirect_uri)、客戶端的授權模式、作用域、資源ID等。

2、客戶端請求授權服務器授權時需要攜帶client_id、client_secret、response_type http://localhost:8080/oauth/authorize?client_id=c123456&client_secret=c123456&response_type=code

3、授權服務器返回登錄頁讓用戶登錄,登錄成功返回授權頁,讓用戶給客戶端授權

5、用戶給與授權之后,授權服務器調用回調地址,返回授權碼 http://localhost:9001/callback?code=j0vvGf

6、客戶端使用授權碼換取token,http://localhost:8080/oauth/token

token校驗有兩種方式:1、配置授權服務器的token校驗的端口,2、配置和授權服務器一樣的TokenStore

隱式模式

用戶登錄授權服務器並對客戶端授權,授權服務器直接返回token,省略了授權碼的過程。

前提:

需要在授權服務器上提前定義好客戶端的 客戶端ID(client_id) 、 客戶端秘鑰(client_secret)、回調地址(redirect_uri)、客戶端的授權模式、作用域、資源ID等。

2、客戶端請求授權服務器授權時需要攜帶client_id、response_type

http://localhost:8080/oauth/authorize?client_id=client-a&response_type=token

3、授權服務器返回登錄頁讓用戶登錄,登錄成功返回授權頁,讓用戶給客戶端授權

5、用戶給與授權之后,授權服務器調用回調地址,返回token

http://localhost:9001/callback#access_token=ede88421-5703-4365-a72e-b5f0b6101704&token_type=bearer&expires_in=42841&scope=all

token校驗有兩種方式:1、配置授權服務器的token校驗的端口,2、配置和授權服務器一樣的TokenStore

密碼模式

密碼模式中需要用戶提供自己的賬號密碼給客戶端,客戶端使用用戶的賬號密碼和client_id client_secret去授權服務器請求token

客戶端模式

客戶端以自己的名義,而不是以用戶的名義 去授權服務器申請token

這個模式中用戶不需要和授權服務器有什么聯系,只需要和客戶端做交互。

JWT

  • 是基於token的認證流程的具體實現
  • 主要用來生成token,驗證token是否過期以及獲取用戶信息

總結

oauth2.0是規范,使用時是引入了oauth2.0的規范。

JWT是token的實現,做token的生成以及校驗。

Security本身是一套完整的認證和授權解決方案,他是一條很長的過濾器鏈,使用oauth和JWT需要在過濾器鏈中定義oauth和JW他的具體實現。

前后端分離的系統,只需要實現token,做token的頒發和校驗。JWT是token的一種實現方式。

系統需要給第三方系統做授權,就需要實現oauth。

JWT對token的實現可以通過解密獲取用戶信息以及權限信息,簡化oauth的校驗流程。

參考:

oauth授權流程以及實現

https://www.cnblogs.com/hellxz/p/oauth2_process.html

springboot-安全認證security+jwt+OAuth2.0關系梳理

https://blog.csdn.net/shishuai4206/article/details/111504155


免責聲明!

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



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