IdentityServer4【Reference】之Profile Service


Profile Service

當創建令牌或者請求像Userinfo這種端點時,IdentityServer通常會需要用戶的標識信息(identity information),默認情況下,IdentityServer只能從認證(authentication)Cookie中保存的claims中獲取這些信息。

將用戶的所有可用的信息都保存到Cookie中很顯然是不現實的,也是一種不好的實踐,所以,IdentityServer定義了一個可擴展的點,這個點(接口)允許動態的加載用戶的Claim,這個點(接口)就是IProfileService。開發人員通常實現此接口來訪問包含用戶數據(claims)的自定義數據庫或API。

IProfileService APIs

GetProfileDataAsync

開發者如果實現該接口方法,這個方法應該用來加載用戶的claims。這個方法需要一個ProfileDataRequestContext實例作為參數。

IsActiveAsync

開發者如果實現該接口方法,這個方法用來指示當前用戶是否能夠獲取到token,它需要一個IsActiveContext的實例作為參數

ProfileDataRequestContext

它為用戶的聲明(claims)建模,是用戶聲明的媒介物(承載體),它包含了以下屬性:

Subject

ClaimsPrincipal類型,用來表示用戶。

Client

Client類型,表示客戶端(第三方)。

RequestedClaimTypes

IEnumerable<string>類型,用來表示請求的Claims類型。

Caller

string類型,用來表示被請求的Claims中上下文(Context)的標識符(例如IdentityToken,AccessToken,用戶端點(userinfo endpoint)),IdentityServerConstants.ProfileDataCallers這個靜態類聲明的常量中包含了關於這方面的信息。

IssuedClaims

List<Claim>類型,這個列表是一個公共的屬性,將會被返回,由自定義的IProfileService 實現(中的方法)進行填充。

AddRequestedClaims

它作為ProfileDataRequestContext 的擴展方法,用來填充IssedClaims這個列表屬性,但是會首先利用RequestedClaimTypes這個列表屬性里面的值過濾一下,也就是說會根據/基於RequestedClaimTypes里面的值返回相應的值。

Requested scopes and claims mapping 請求的scopes和聲明之間的映射

在客戶端的Scopes中聲明的關於用戶的信息會被放到token中返回到客戶端。GetProfileDataAsync方法負責根據ProfileDataRequestContext中的RequestedClaimTypes屬性來返回用戶的信息。

而RequestedClaimTypes的填充(它是一個列表)是基於Resource(它為Scope進行了建模)中定義的Claims。如果請求的Scope中包含了IdentityResource,那么RequestedClaimTypes的填充是由IdentityResource中定義的Claims進行填充,如果請求的Scope中包含的是ApiResource,那么RequestedClaimTypes的填充是由ApiResource中定義的Scope進行填充的(由於默認情況如果構造ApiResource的時候沒有制定Scopes這個屬性的值,那么這個ApiResource內部會利用構造函數傳入的name和displayname創建一個Scope)。

IsActiveContext

它建模請求已確定當前用戶是否能夠被允許獲得令牌(token)。它包含以下屬性:

Subject

ClaimsPrincipal類型,建模了當前用戶,概念同ProfileDataRequestContext中的同名屬性。

Client

Client類型,概念同ProfileDataRequestContext中的同名屬性

Caller

String類型,概念通ProfileDataRequestContext中的同名屬性

IsActive

boolean類型,它應該在IProfileService的實現中被賦值,已確定用戶是否可以被允許獲得token

 


免責聲明!

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



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