AD FS OpenID Connect用户信息端点仅返回sub的问题求助
AD FS OpenID Connect UserInfo端点仅返回sub值问题排查与解决
问题场景
按照Microsoft官方文档完成AD FS服务器与Web应用的配置后,成功登录可获取token和access token,但调用AD FS OpenID Connect的userinfo端点时仅返回sub值。已执行以下操作但问题未解决:
- 创建信赖方信任、声明提供程序
- 在客户端及授权URL中添加
profile、openid、email权限范围 - 在AD FS设置界面勾选对应权限选项
但响应体中的scope始终仅为openid。
相关代码:
const client = new oneLoginIssuer.Client({ client_id: configService.get<string>('CLIENT_ID'), client_secret: configService.get<string>('CLIENT_SECRET'), redirect_uris: [configService.get<string>('REDIRECT_URI')], response_types: ['code id_token'], }); this.client.authorizationUrl({ scope: 'profile openid email', response_mode: 'form_post', nonce: this.nonce, });
解决步骤
- 配置信赖方信任的声明规则
手动为信赖方添加声明传递规则,将AD FS中的用户属性(如E-Mail Address、Given Name、Surname)映射到OpenID Connect标准声明(如email、given_name、family_name),确保这些属性能被传递到userinfo端点。 - 验证客户端权限设置
在AD FS管理控制台的「应用程序组」->对应应用->「客户端」配置中,确认允许的范围里已勾选profile、email,且这些范围的「颁发授权」设置为允许状态。 - 检查响应类型与scope兼容性
当前使用response_types: ['code id_token']混合流,可尝试切换为纯授权码流(response_types: ['code'])测试,确认是否能获取完整scope权限。 - 确认AD FS版本支持
确保使用AD FS 2016及以上版本,低版本AD FS对OpenID Connect的profile、email标准scope支持不完整。 - 调试授权请求参数
抓包查看实际发送给AD FS的授权请求,确认scope参数确实包含profile openid email,排查是否存在代码配置项读取错误的情况。 - 解码access token验证权限
使用JWT解码工具解析access token,查看其中的scope字段是否包含profile和email。若access token内仅含openid,说明授权阶段AD FS未授予对应权限,需重新检查信赖方与客户端的权限配置。
内容的提问来源于stack exchange,提问作者Ibrahim
相关产品推荐
相关产品推荐

