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

node-oidc-provider单Access Token适配/userinfo与资源服务器问题及方案确认

关于node-oidc-provider无法签发兼顾/userinfo端点与API调用的Access Token的问题及方案确认

核心疑问

为什么node-oidc-provider拒绝签发可同时用于/userinfo端点和API(资源服务器)调用的单个Access Token?

  • 在OAuth2和OIDC规范中,并未规定授权服务器不能签发此类令牌,相关技术讨论也表明该操作具备可行性。
  • 但根据node-oidc-provider文档说明,/userinfo端点要求使用至少包含openid scope且无资源服务器受众的不透明Access Token,这就导致同一令牌无法兼顾两种场景。

业务场景

我们的场景为自有移动应用、授权服务器及API,用户通过“连接到我们的服务器”登录,当前流程需分两步:

  1. 认证用户并获取userinfo
  2. 让用户授权调用API(请求仅用于该API的Access Token)
    两次用户交互的流程体验不佳。

方案确认(基于@filip-skokan的回答)

方案1:通过idToken获取用户信息,无需调用/userinfo端点

  • 操作流程:携带resource参数发起授权请求,获取带资源服务器scope的令牌,用响应中的idToken获取用户信息,无需调用/userinfo端点。
  • 正确性判断:此方案正确。OIDC规范中idToken本身就包含用户核心身份信息(只要请求的scope包含openid及email等用户信息类scope),完全可以替代/userinfo端点的调用;同时携带resource参数的令牌可直接用于API调用,一次授权请求即可满足两个需求,避免两次用户交互。

方案2:利用refreshToken获取带资源scope的新Access Token

  • 操作流程:启用refreshToken签发,先发起仅包含用户信息scope(如openid、email)的授权请求,获取Access Token和refreshToken后,用refreshToken获取带资源scope的新Access Token。
  • 疑问解答:是否需要二次授权取决于授权服务器的consent配置:
    • 如果初始授权时用户已同意“可后续扩展相关权限”,或授权服务器允许通过refreshToken静默获取新增scope权限,则不会强制用户再次授权。
    • 如果授权服务器默认要求对新增scope重新获取用户同意,则会触发二次授权。
      建议优化方向:初始授权时就包含所有可能用到的scope(包括资源服务器的scope),或调整授权服务器配置,允许通过refreshToken静默扩展资源scope权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:10:27