OIDC请求无openid scope报Identity related scope requests, but no openid scope求助
OIDC请求未携带openid scope报错解决方案
该错误的触发逻辑为OIDC协议的标准校验规则:只要授权请求中包含任意身份类标准scope(
profile/phone/address等),OIDC提供商(OP)会强制要求请求必须携带openid作为前置scope。
可根据你的实际业务场景选择对应方案:
场景1:仅需要AccessToken做资源接口授权,不需要获取用户身份信息
- 先排查当前授权请求的scope列表,移除所有
profile/email/phone等OIDC标准身份类scope,仅保留业务资源对应的自定义scope即可,没有身份类scope的前提下OP不会触发openidscope的强制校验。 - 如果使用的OIDC客户端库默认自动附加了身份类scope,手动指定scope列表覆盖默认配置即可,示例如下:
// oidc-client-ts 配置示例 const authConfig = { authority: "https://your-op-service.com", client_id: "your-business-client-id", // 仅保留资源授权需要的自定义scope,不要加入任何身份类scope scope: "goods:read order:write", redirect_uri: "https://your-business-domain.com/callback" }- 先排查当前授权请求的scope列表,移除所有
场景2:需要获取用户身份信息,但业务规则不允许显式传递
openidscope- 进入你的OIDC提供商的客户端管理后台,找到对应业务应用的配置项,开启「默认自动附加openid scope」的功能,主流OP(Keycloak、IdentityServer、Authing等)都支持该配置,开启后OP会在后端自动为请求补全
openidscope,不会触发校验报错。 - 如果是自研的OP服务,可针对性修改校验逻辑:对指定client_id的请求,在校验身份scope时跳过
openid的必填检查,或者直接在参数解析层自动注入openidscope。
- 进入你的OIDC提供商的客户端管理后台,找到对应业务应用的配置项,开启「默认自动附加openid scope」的功能,主流OP(Keycloak、IdentityServer、Authing等)都支持该配置,开启后OP会在后端自动为请求补全
场景3:使用的OP不支持默认附加scope的配置
在业务服务和OP之间增加一层反向代理,在代理层拦截授权请求,自动为对应业务应用的scope参数追加openid字段,该方案对业务侧完全无侵入,不需要修改现有业务请求逻辑。
补充说明:追加
openidscope仅用于满足OP的协议校验要求,不会改变原有授权请求的权限范围,也不会额外返回不需要的用户字段。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

