OAuth2 模式介紹

2022-01-11 16:01:41 字數 3468 閱讀 5928

1. 憑證(客戶端)模式 allowedgranttypes = granttypes.clientcredentials

應用場景:客戶端/服務與服務之間的互動訪問資源,token代表客戶端的請求,而不是使用者,攜帶客戶端註冊時候的貧據進行認證,獲取token,

使用過程:會向token endpoint傳送token請求,並獲得代表客戶機的access token,客戶端通常必須使用token endpoint的client id和secret進行身份驗證,必須是完全信任的

2. 密碼模式(clientallowedgranttypes = granttypes.resourceownerpassword)

使用過程:使用者名稱和密碼到token endpoint,向資源伺服器請求令牌。這是一種「非互動式」授權方法

3. 簡化模式(clientallowedgranttypes =granttypes.implicit)

應用場景:spa應用程式,不能處理token過期,訪問a**,跳轉到b授權中心,b授權中心登入,通過**位址帶上授權碼,返回a**

使用過程:用於服務端和spa應用程式端進行身份認證,要麼用於身份身份驗證和access token的傳輸,token都是基於瀏覽器傳輸

注意,這裡response_type=token,無需傳遞client secret,傳遞client_id只是為了驗證在auth server配置的redirect_uri是否一致,redirect_uri中如果攜帶引數,則最好對url編碼再作為引數傳遞過去

4. 授權碼模式(clientallowedgranttypes=granttypes.code)

應用場景:客戶端不輸入使用者名稱密碼。授權伺服器來輸入使用者名稱密碼,返回 授權碼給客戶端,客戶端拿到授權碼,訪問授權中心獲得訪問令牌,授權碼失效

授權碼的原因:客戶端不儲存使用者名稱密碼,客戶端沒有能力保證使用者名稱密碼的安全,跟簡化模式有點類似但是在簡化模式上面多了乙個授權碼的概念

大致步驟:

(a)使用者訪問客戶端,客戶端將使用者導向認證伺服器。使用者認證伺服器的賬號密碼

(b)使用者選擇是否給予客戶端授權。

(c)假設使用者給予授權,認證伺服器將使用者導向客戶端事先指定的"重定向 uri"(redirection uri),同時附上乙個授權碼。

(d)客戶端收到授權碼,附上早先的"重定向uri",向認證伺服器申請令牌。這一步是在客戶端的後台的伺服器上完成的,對使用者不可見。

(e)認證伺服器核對了授權碼和重定向uri,確認無誤後,向客戶端傳送訪問令牌(access token)和更新令牌(refresh token)

應用詳情:

5. 更新令牌

3. 混合模式(clientallowedgranttypes =granttypes.hybrid)存在於 identityserver4

應用場景:用於mvc框架,伺服器端 web 應用程式和原生桌面/移動應用程式

使用過程:hybrid是由implicit和authorization code結合起來的一種授權方式。其中implicit用於身份認證,id token被傳輸到瀏覽器並在瀏覽器進行驗證;而authorization code使用反向通道檢索token和重新整理token

為什麼要用身份認證(oidc):

比如你去酒店開房,是不是需要身份證?來表明你是誰,是那裡人,中國人還是外國人,然後才會給你開個房間,給你鑰匙 ,這個是授權

需要身份認證,所以在oauth2的基礎是你要做一些事情就是:

1. 定義端點以返回有關使用者的屬性(使用者宣告資訊)

2. 定義第三方應用程式可以用來向使用者請求身份資訊的乙個或多個範圍(比如酒店可以請求使用者的身份證,不需要駕照,交警隊就需要你的駕照+身份證才能辦一些事情)

3. 為處理身份驗證和身份時遇到的方案定義其他錯誤**和必要的擴充套件引數,例如何時基於會話超時重新提示使用者的憑據,或如何允許使用者選擇新帳戶登入應用程式時 (簡而言之就是當你遇到身份證過期,遺失的時候如何處理)

oidc把識別使用者身份的東西叫做id token ,使用發行人的私鑰簽名的json有效負載合成的字串

1. 使用者的唯一識別符號sub(subject的簡稱)(類似你的身份證號)

2. 發布令牌的伺服器iis的識別符號,說白了就是誰發布的這個id令牌(比如身份證中國**發的,看身份證背面就有哪個派出所發布的)

3. 請求此令牌的客戶端識別符號aud(簡稱audience)

4. 令牌的生存週期exp(類似身份證的過期時間)

一般會重寫 iresourceownerpasswordvalidator 與 iprofileservice 介面來驗證使用者與自定義一些功能

ids4發現文件: http://localhost:5000/.well-known/openid-configuration

OAuth2認證方式介紹

在任何 oauth 流程中都有三個參與者 客戶端 登入的人員或使用者 使用者 客戶端想要登入的應用程式 在上圖中是 gitlab 服務提供者 使用者通過其進行身份驗證的外部應用程式。上圖中為 github 使用oauth進行認證和授權的過程如下所示 a 使用者開啟客戶端以後,客戶端要求使用者給予授權...

Oauth2 四種模式

1.隱式授權模式 implicit grant 第一步 使用者訪問頁面時,重定向到認證伺服器。第二步 認證伺服器給使用者乙個認證頁面,等待使用者授權。第三步 使用者授權,認證伺服器想應用頁面返回token 第四步 驗證token,訪問真正的資源頁面 授權碼授權模式 authorization cod...

OAuth2四種模式

二 授權碼授權模式 authorization code grant 三 密碼模式 resource owner password credentials grant 四 客戶端憑證模式 client credentials grant 第一步 使用者訪問頁面時,重定向到認證伺服器。第二步 認證伺服...