在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
相关产品推荐
相关产品推荐

