OAuth2與JWT的區別和聯絡

2021-09-20 12:52:46 字數 1532 閱讀 4917

jwt:json web token // 是一種具體的token實現框架

oauth2:open authorization // 是一種授權協議,是規範,不是實現

spring security oauth2:spring 對 oauth2 的開源實現,優點是能與spring cloud技術棧無縫整合

spring security:前身是 acegi security ,能夠為 spring企業應用系統提供宣告式的安全訪問控制

這裡需要理解兩個概念:

jwt是基於token的認證協議的實現,oauth2是一種授權框架,提供了一套詳細的授權協議標準(指導)。

jwt的基本思路就是使用者提供使用者名稱和密碼給認證伺服器,伺服器驗證使用者提交資訊資訊的合法性;如果驗證成功,會產生並返回乙個token(令牌),使用者可以使用這個token訪問伺服器上受保護的資源。

對於oauth2的使用場景,官方文件都提到針對第三方應用,需要強調的是,這個第三方應用,不要只當作乙個完全不相干的應用,這裡除了服務本身外的應用,就算第三方應用,即使是你自己的應用,也是第三方應用,不要把第三方應用只當作其他公司開發的應用或系統,如果這樣就對oauth的理解太狹隘了。從廣義上講,你自己開發的客戶端也是一種第三方,只是你的客戶端是可以輸入使用者名稱密碼獲取令牌的,而真正的第三方是不可以使用使用者名稱和密碼獲取令牌的(這樣暴露使用者密碼給第三方了),一般是通過審核過後的開發者id來獲取令牌的,所以他們在流程上是有很大一部分是相似的。

oauth2的幾種授權模式:

授權碼模式(authorization code)(正統方式)(支援refresh token)

授權碼簡化模式(implicit)(為web瀏覽器設計)(不支援refresh token)

pwd模式(resource owner password credentials) (基本不用)(支援refresh token)

client模式(client credentials) (為後台api呼叫設計)(不支援refresh token)

擴充套件模式(extension)(自定義模式)

oauth的幾個概念:

roles角色

應用程式或者使用者都可以是下邊的任何一種角色:

資源擁有者

資源伺服器

客戶端應用

授權伺服器

client types客戶端型別

這裡的客戶端主要指api的使用者。它可以是的型別:

私有的公開的

client profile客戶端描述

oauth2框架也指定了集中客戶端描述,用來表示應用程式的型別:

web應用

使用者**

原聲應用

authorization grants認證授權

認證授權代表資源擁有者授權給客戶端應用程式的一組許可權,認證授權方式可以是下邊幾種形式:

授權碼隱式授權

資源擁有者密碼證書

客戶端證書

endpoints終端

oauth2框架需要下邊幾種終端:

認證終端

token終端

重定向終端

OAuth2簡易實戰(三) JWT

授權伺服器 修改 configuration enableauthorizationserver public class oauth2authorizationserver extends authorizationserverconfigureradapter bean public jwtto...

擴充套件jwt解決oauth2 效能瓶頸

資源伺服器的請求都會被攔截 到認證伺服器校驗合法性 如下圖 如上步驟在實際使用,會造成認證中心的負載壓力過大,成為造成整個系統瓶頸的關鍵點。check token 過程中涉及的原始碼 bean public tokenenhancer tokenenhancer final mapadditiona...

基於JWT和Oauth2 實現 SSO 單點登入

1.jwt 的特點 自包含 在jwt裡面可以包含很多資訊,可從伺服器解析,而不僅僅是一串沒有意義的字串。密簽 安全簽名,防止別人篡改。可擴充套件 因為jwt可以包含有用的資訊,所以其具有不俗的擴充套件性。如圖 1.流程 訪問應用a服務,會跳到認證伺服器的登入頁面,輸入使用者名稱和密碼登入後,再訪問應...