You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Keycloak中将用户属性映射至标准OIDC声明?

Keycloak请求phone scope后的声明返回问题解答

你的预期部分正确:

  • phone_number声明能正常返回符合预期,但phone_number_verified不会自动返回,需要额外配置。

1. 关于phone_number的预期合理性

你在Keycloak的Realm Settings > User Profile中添加了手机号属性,同时客户端请求了标准phone scope,Keycloak会自动将用户的手机号映射到OIDC标准的phone_number声明,这和你当前令牌中的结果一致,完全符合OIDC协议对phone scope的定义。

2. 为什么phone_number_verified不会自动返回

Keycloak默认不会生成phone_number_verified声明,哪怕你请求了phone scope,原因是:

  • 该声明依赖用户的phoneNumberVerified属性,但Keycloak默认没有开启这个用户属性,也不会自动将其映射到令牌中。

要让phone_number_verified出现在令牌里,需要完成以下配置:

  • 步骤1:添加用户属性
    进入Realm Settings > User Profile,添加一个名为phoneNumberVerified的属性,类型选择boolean,并确保该属性在注册表单中可见(如果需要用户自主设置)。
  • 步骤2:配置声明映射
    进入客户端对应的Client Scopes,找到phone scope并进入其Mappers标签页,添加新的映射器:
    • 类型选择User Attribute
    • 属性名填写phoneNumberVerified
    • Token Claim Name填写phone_number_verified
    • 根据需求勾选Add to ID token和Add to access token
  • 步骤3:设置用户属性值
    在用户详情的Attributes页面,给目标用户设置phoneNumberVerified的值为true或false。

3. AspNet Core配置的补充调整

你当前的配置中写了options.ClaimActions.MapJsonKey("phone_verified", "phone_verified");,但OIDC标准的声明名是phone_number_verified,建议修改为:

options.ClaimActions.MapJsonKey("phone_number_verified", "phone_number_verified");
// 或者映射到.NET标准声明类型
options.ClaimActions.MapJsonKey(ClaimTypes.MobilePhoneVerified, "phone_number_verified");

内容的提问来源于stack exchange,提问作者user23137927

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:27:13