第58章 Profile Service - Identity Server 4 中文文档(v1.0.0)

时间:2022-04-02 18:17:08

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实现分配。

github地址