跳到主要内容

自定义 ID 令牌 (ID token)

介绍​

ID 令牌 (ID token) 是由 OpenID Connect (OIDC) 协议定义的一种特殊类型的令牌。它作为由授权服务器(Logto)在用户成功认证 (Authentication) 后签发的身份声明,携带关于已认证用户身份的声明 (Claims)。

与用于访问受保护资源的 访问令牌 (Access tokens) 不同,ID 令牌 (ID token) 专为向客户端应用传递已认证用户身份而设计。它们是包含关于认证 (Authentication) 事件和已认证用户声明 (Claims) 的 JSON Web Token (JWT)。

ID 令牌 (ID token) 声明 (Claims) 的工作原理​

在 Logto 中,ID 令牌 (ID token) 的声明 (Claims) 分为两类:

  1. 标准 OIDC 声明 (Claims):由 OIDC 规范定义,这些声明 (Claims) 完全由认证 (Authentication) 时请求的权限 (Scopes) 决定。
  2. 扩展声明 (Claims):Logto 扩展的声明 (Claims),用于携带额外的身份信息,由双重条件模型(权限 (Scope) + 开关 (Toggle))控制。

标准 OIDC 声明 (Claims)​

标准声明 (Claims) 完全受 OIDC 规范约束。它们是否包含在 ID 令牌 (ID token) 中,仅取决于你的应用在认证 (Authentication) 时请求的权限 (Scopes)。Logto 不提供禁用或有选择地排除单个标准声明 (Claims) 的选项。

下表展示了标准权限 (Scopes) 与其对应声明 (Claims) 的映射关系:

ScopeClaims
openidsub, auth_time, acr, amr(认证上下文声明 (Claims) 在会话中存在时包含;参见 提升认证 (Step-up authentication))
profilename, family_name, given_name, middle_name, nickname, preferred_username, profile, picture, website, gender, birthdate, zoneinfo, locale, updated_at
emailemail, email_verified
phonephone_number, phone_number_verified
addressaddress

例如,如果你的应用请求了 openid profile email 权限 (Scopes),ID 令牌 (ID token) 将包含来自 openid、profile 和 email 权限 (Scopes) 的所有声明 (Claims)。

扩展声明 (Claims)​

除了标准 OIDC 声明 (Claims) 外,Logto 还扩展了携带 Logto 生态特有身份信息的声明 (Claims)。这些扩展声明 (Claims) 遵循双重条件模型,才能被包含在 ID 令牌 (ID token) 中:

  1. 权限 (Scope) 条件:应用在认证 (Authentication) 时必须请求对应的权限 (Scope)。
  2. 控制台开关:管理员需在 Logto Console 中启用该声明 (Claim) 在 ID 令牌 (ID token) 中的包含。

两项条件必须同时满足。权限 (Scope) 作为协议层的访问声明,开关 (Toggle) 作为产品层的暴露控制——两者职责明确且不可替代。

可用的扩展权限 (Scopes) 与声明 (Claims)​

ScopeClaims描述默认包含
custom_datacustom_data用户对象上存储的自定义数据
identitiesidentities, sso_identities用户关联的社交和 SSO 身份
rolesroles用户分配的角色 (Roles)✅
urn:logto:scope:organizationsorganizations用户的组织 (Organizations) ID✅
urn:logto:scope:organizationsorganization_data用户的组织 (Organizations) 数据
urn:logto:scope:organization_rolesorganization_roles用户的组织 (Organizations) 角色分配✅

在 Logto Console 中配置​

要在 ID 令牌 (ID token) 中启用扩展声明 (Claims):

  1. 前往 控制台 > 自定义 JWT。
  2. 打开你希望包含在 ID 令牌 (ID token) 中的声明 (Claims) 开关。
  3. 确保你的应用在认证 (Authentication) 时请求了对应的权限 (Scopes)。
自定义访问令牌 (Access token)

OpenID Connect Core - ID Token