WSO2 IS自定义声明方言配置后名字未在/userinfo返回的问题
解决WSO2 IS OAuth2 Userinfo接口未返回Givenname的问题
遇到这种Givenname字段在Userinfo接口响应里缺失的情况,我帮你梳理几个最可能的排查方向,一步步来应该能解决:
1. 先确认目标用户的Givenname属性是否有值
这是最容易被忽略的基础问题:你调用接口用的用户(比如示例里的abc@carbon.super),在WSO2 IS的用户存储里是不是真的填了名字?
- 登录管理控制台,进入用户和角色 > 列表 > 用户,找到对应的用户
- 点击编辑,查看用户属性里的「名字」字段,如果是空的,先填上具体内容再测试接口
2. 检查自定义声明方言的映射配置
既然用了自定义声明方言,得确保映射配置没出错:
- 回到服务提供商的Claim Configuration页面
- 在Define Custom Claim Dialect区域,确认你添加的
http://wso2.org/claims/givenname这条本地声明已经正确配置,重点看Supported by Default选项是否勾选——如果没勾,这条声明不会被默认包含在响应里,必须手动勾选
3. 验证OAuth2 Scope的声明关联配置
Userinfo返回的字段是和请求的OAuth2 Scope绑定的,要确保你的客户端请求的Scope包含了获取Givenname的权限:
- 进入服务提供商的OAuth2/OpenID Connect Configuration页面
- 找到你正在使用的OAuth客户端,先确认
openid这个基础Scope已经在Allowed Scopes里被勾选(没有openid的话,Userinfo接口的核心字段都没法返回) - 接着点击该客户端的Edit,进入Claim Mapping部分,在Local Claim URI里找到
http://wso2.org/claims/givenname,把它添加到右侧的Selected Claims列表中——这样对应的Scope(比如openid)才会携带这个声明 - 如果你的请求用了自定义Scope,也要确保这个自定义Scope关联了Givenname声明
4. 检查全局身份提供者的声明配置
有时候全局配置会限制返回字段,你可以检查一下:
- 进入管理控制台的身份提供者 > 列表 > 主身份提供者,点击编辑
- 进入Claim Configuration > Claim Dialect Configuration,找到
http://wso2.org/claims/givenname,确认Return in ID Token & UserInfo选项是勾选状态 - 另外也可以确认下Identity > OAuth2 > OAuth2 Settings里的Enable UserInfo Response是开启的(默认是开启的,但保险起见可以核对)
5. 确保curl请求参数正确
最后检查你的请求是否规范:
- 必须使用有效的Access Token,并且这个Token的授权范围包含了所需的Scope(比如
openid) - 正确的curl请求示例应该是这样:
curl -H "Authorization: Bearer <你的Access Token>" https://<IS服务器地址>:<端口>/oauth2/userinfo
- 如果用的是授权码流程,还要确保授权请求里明确指定了
scope=openid(或包含Givenname的自定义Scope)
按照上面的步骤逐一排查,应该就能解决Givenname不返回的问题了。
内容的提问来源于stack exchange,提问作者Viddhiyartha
相关产品推荐
相关产品推荐

