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

在authorization_code流程中使用node-oidc-provider签发JWT access token问题排查

解决node-oidc-provider 7.11.4中JWT格式Access Token不生效的问题

核心修复步骤

1. 必须在请求中携带resource参数

resourceIndicators特性的触发依赖请求里的resource参数,不管是授权请求(/authorize)还是令牌请求(/token)都得带上。示例如下:

  • 授权请求示例:
GET /oauth2/v1/authorize?client_id=0oa5pa23mzKPWYtvV5d7&redirect_uri=https://jwt.io&response_type=code&scope=openid profile email&resource=solid
  • 令牌请求示例:
POST /oauth2/v1/token
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&code=AUTH_CODE&redirect_uri=https://jwt.io&resource=solid

只有请求里存在resource参数,oidc-provider才会调用你配置的getResourceServerInfo方法,进而签发JWT格式的Access Token。

2. 配置ES256签名所需的密钥

你指定了alg: 'ES256'签名算法,但必须确保oidc-provider拥有对应的EC密钥对。在配置中添加jwks选项,示例:

// 新增jwks配置
jwks: {
  keys: [
    {
      kty: 'EC',
      crv: 'P-256',
      x: '你的公钥X值',
      y: '你的公钥Y值',
      d: '你的私钥D值',
      use: 'sig',
      alg: 'ES256'
    }
  ]
},
features: {
  resourceIndicators: {
    getResourceServerInfo: () => ({
      audience: 'solid',
      accessTokenTTL: 2 * 60 * 60, // 2小时
      accessTokenFormat: 'jwt',
      jwt: {
        sign: { alg: 'ES256' },
      },
    }),
  },
}

可以用node-jose库或密钥生成工具生成符合JWKS格式的EC密钥对。

3. 匹配resource参数与audience值

确保请求中resource参数的值和getResourceServerInfo返回的audience值一致,比如都为solid,这样才能正确关联资源服务器配置。

4. 验证客户端配置

你的客户端设置了token_endpoint_auth_method: 'none',这在授权码流程中是允许的,但要确保令牌请求时不需要额外的客户端认证,与当前配置保持一致。

验证方式

完成配置后,发起授权请求获取令牌,将Access Token拿到jwt.io解析,若能正常解析出payload和签名,说明配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:51:21