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