1. 程式人生 > 其它 >【spring Security】Security、oauth、JWT關係梳理

【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