Azure AD租户OpenID Connect身份提供商新增范围未在idp_access_token中返回
问题描述
环境
部署在Azure上的Node.js/Express Web应用程序
期望行为
单点登录后,idp_access_token中的scp值应包含新增的范围:Sites.ReadWrite.All。
实际行为
scp值未包含该新增范围。
重现步骤
- 进入
Azure AD> [切换目录至Azure AD B2C] >Azure AD B2C>身份提供商 - 点击现有的
Open ID Connect条目(该提供商允许主Azure AD租户用户通过单点登录登录) - 将
Scope字段值从:
openid profile User.ReadWrite.All Directory.ReadWrite.All Team.ReadBasic.All TeamSettings.ReadWrite.All
修改为:
openid profile User.ReadWrite.All Directory.ReadWrite.All Team.ReadBasic.All TeamSettings.ReadWrite.All Sites.ReadWrite.All
即新增Sites.ReadWrite.All范围
- 执行单点登录,在jwt.ms中查看返回的
idp_access_token,发现scp属性缺少Sites.ReadWrite.All:
Directory.ReadWrite.All openid profile Team.ReadBasic.All TeamSettings.ReadWrite.All User.ReadWrite.All email
- 尝试登出后重新登录,仍仅获取旧范围值,新范围未添加至
idp_access_token。
解决方案
确认主Azure AD租户中应用的权限授予状态
由于使用主Azure AD作为B2C的身份提供商,Sites.ReadWrite.All是Microsoft Graph的委托权限,需在主AD租户完成以下操作:- 切换到主Azure AD目录,进入
企业应用,找到对应OpenID Connect身份提供商的应用 - 进入
权限页面,检查是否已添加Sites.ReadWrite.All委托权限 - 若已添加但未授权,点击
授予管理员同意,完成租户级权限授权
- 切换到主Azure AD目录,进入
强制刷新令牌并清除缓存
- 用户端:清除浏览器缓存、Cookie,或使用隐私窗口重新登录,避免客户端缓存旧令牌
- 后端:在应用中调用令牌刷新接口,强制获取新的
idp_access_token,不使用缓存中的旧令牌
等待配置生效
Azure AD B2C的跨租户身份提供商配置变更可能存在延迟,建议等待10-15分钟后再测试验证权限配置的正确性
- 返回B2C的身份提供商配置页面,确认
Scope字段确实包含Sites.ReadWrite.All,无拼写错误 - 在主AD的应用注册中,确认
API权限里Sites.ReadWrite.All的状态为已授予 [租户名] 管理员同意
- 返回B2C的身份提供商配置页面,确认
内容的提问来源于stack exchange,提问作者user1063287
相关产品推荐
相关产品推荐

