上一篇文章實作了IdentityServer4與Asp.net core Identity的集成,可以使用通過identity注冊功能添加的用戶,以Password的方式獲取Access token,但是無論是Client Credentials還是Password流程它都是OAuth2.0的流程,本篇文章就來先介紹一下關于OpenIDConnect的基本概念和用法, 本文有以下內容:
- OpenIDConnect介紹及基本概念
- OIDC授權碼流程及實作
- OIDC隱式流程及實作
- 小結
OpenIDConnect介紹及基本概念
根據OpenIDConnect的定義簡單來說,OpenIDConnect=(Identity, Authentication)+Oauth2.0(來自:https://openid.net/connect/faq/) 另外從下面的回答可以看出OAuth2.0是一個身份驗證/授權框架,而OpenID Connect基于這些提供了身份標識功能,身份標識就是“是誰”的 問題,
至于oidc如何實作的,詳情可以查看檔案:https://openid.net/specs/openid-connect-core-1_0.html,從檔案中可以找到這樣幾個關鍵詞:ID Token、Authentication、Authentication Request、Authorization Code Flow、Implicit Flow、Hybrid Flow、Response_Type、Authorization Endpoint、Token Endpoint,
以及兩個表,OIDC身份驗證流程表:
從以上關鍵詞可以獲得下面的資訊:
- ID Token:是一個包含特定宣告(Claim)的jwt,特定的宣告指的是身份驗證服務器驗證終端用戶時候產生的供客戶端使用的資訊,如發行人(issuer)、最終用戶標識(sub)、客戶端id(aud)、過期時間(exp)、Token的發布時間(iat)、用戶身份驗證時間(auth_time)等,另外也可以包含其它的宣告,ID Token由身份驗證服務器(IdentityServer4,OP)頒發,交由客戶端(RP)進行驗證,
- Authentication:由IdentityServer4(OP)提供的身份驗證(登錄),最終用戶通過IdentityServer4(OP)的身份驗證(登錄)后,就可以發起Authentication Request,或者說如果在發起Authentication Request時用戶未進行身份驗證時將重定向到身份驗證界面進行身份驗證,
- Authentication Request:向IdentityServer4(OP)的授權終結點發起的,用于獲取ID Token、授權碼(Authorization Code)甚至是訪問Token(Access Token)的請求,
- Authorization Code Flow、Implicit Flow、Hybrid Flow:Authentication Request的三種不同請求流程,
- Response_Type:Authentication Request的引數之一,根據設定該引數來決定使用哪一種請求流程,
- Authorization Endpoint:授權終結點,用于接收Authentication Request,
- Token Endpoint:令牌終結點,用于接收訪問令牌(Access Token)獲取請求,
OIDC授權碼流程及實作
下面以授權碼流程為例進行詳細解說,首先授權碼流程步驟如下:
確保“interactive”這個客戶端的重定向地址為“應用程式地址/signin-oidc”,這里需要注意的是這個重定向地址實際上是客戶端(WebApi)通過方法.AddOpenIdConnect添加的用于處理odic身份驗證的身份驗證處理器:

下面是登錄頁面url資訊:

Access Token:

OIDC隱式流程及實作
既然最復雜的授權碼流程已經能夠實作了,那么簡單的隱式流程肯定沒問題,下面就演示一下如何通過隱式流程將token直接獲取到瀏覽器中, 首先創建一個支持隱式流程的client:
小結
本篇文章介紹了OpenIDConnect的基本概念,并通過已有的IdentitySever程式演示了基于授權碼和隱式流程,其中授權碼模式是一種較為安全的模式,所有的關鍵的資料包括授權碼以及各類token均在client的后臺完成,如果需要可以把相關的token加密后以cookie的方式放到客戶端以供后續使用,而隱式模式可以將各類token回傳到瀏覽器中,這種模式可以在單頁應用中使用,將token交由js來進行管理并用于受保護資源的訪問, 另外到目前為止我們可以看到的是IdentityServer或者說IdentityServer4的作用就是校驗Client資訊、終端用戶的用戶名密碼資訊,然后生成授權碼以及各類token,而token的驗證和使用實際上還是在Client中進行的, 最后OIDC是一個身份驗證協議,那么身份驗證和授權在Asp.net core應用程式中是如何體現的呢?下篇文章就來聊聊這個問題, 參考: https://openid.net/specs/openid-connect-core-1_0.html https://openid.net/connect/faq/ https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-protocols-oidc 本文鏈接:https://www.cnblogs.com/selimsong/p/14355150.html 從零搭建一個IdentityServer——目錄轉載請註明出處,本文鏈接:https://www.uj5u.com/net/255415.html
標籤:.NET Core
