IdentityServer通常在创建令牌或处理对userinfo或内省端点的请求时需要有关用户的身份信息。默认情况下,IdentityServer仅具有身份验证cookie中的声明,以便为此身份数据进行绘制。
将用户所需的所有可能声明放入cookie中是不切实际的,因此IdentityServer定义了一个可扩展点,允许根据用户需要动态加载声明。这个可扩展点是IProfileService
开发人员通常可以实现此接口来访问包含用户身份数据的自定义数据库或API。
58.1 IProfileService APIs
GetProfileDataAsync
期望为用户加载声明的API。它传递了一个实例ProfileDataRequestContext
。IsActiveAsync
预期用于指示当前是否允许用户获取令牌的API。它传递了一个实例IsActiveContext
。
58.2 ProfileDataRequestContext
模拟用户声明的请求,并且是返回这些声明的工具。它包含以下属性:
Subject
该ClaimsPrincipal
模型的用户。Client
Client
用于正被请求的声明。RequestedClaimTypes
请求的声明类型集合。Caller
正在请求声明的上下文的标识符(例如,身份令牌,访问令牌或用户信息端点)。常量IdentityServerConstants.ProfileDataCallers
包含不同的常量值。IssuedClaims
将返回Claim
的列表。预计这将由自定义IProfileService
实现填充。AddRequestedClaims
扩展方法对ProfileDataRequestContext
填充IssuedClaims
,但首先根据索引过滤RequestedClaimTypes
。
58.3 请求的范围和声明映射
客户端请求的范围控制用户声明在令牌中返回给客户端的内容。该GetProfileDataAsync
方法负责根据ProfileDataRequestContext
上的RequestedClaimTypes
集合动态获取这些声明。
该RequestedClaimTypes
集合是基于该定义的用户声明资源的范围进行建模。如果请求的范围是身份资源,则将RequestedClaimTypes
根据在IdentityResource
中定义的用户声明类型填充声明中的声明。如果请求的范围是API资源,则将RequestedClaimTypes
根据ApiResource
中定义的用户声明类型填充声明中的声明Scope
。
58.4 IsActiveContext
对要确定的请求建模是当前允许用户获取令牌。它包含以下属性:
Subject
该ClaimsPrincipal
模型的用户。Client
Client
用于正被请求的声明。Caller
正在请求声明的上下文的标识符(例如,身份令牌,访问令牌或用户信息端点)。常量IdentityServerConstants.ProfileDataCallers
包含不同的常量值。IsActive
指示是否允许用户获取令牌的标志。预计这将由自定义IProfileService
实现分配。