调用Tapkey Token Exchange接口返回400 invalid_grant问题咨询
Tapkey令牌交换invalid_grant错误排查方案
修正JWT字段键名与取值
你当前JWT Payload使用了不符合要求的长名键,需要替换为JWT标准缩写键,同时删除多余的algorithm字段,各字段取值严格符合以下要求:注意:以下字段取值错误是你当前遇到问题的核心诱因
修正后的Payload参考示例:{ "iss": "你在Tapkey管理后台注册身份提供商时分配的身份提供商ID", "aud": "https://login.tapkey.com", "sub": "myIpUserID1", "iat": 1633339589, "exp": 1633343189 }各字段规则:
iss:替换原issuer字段,值为你注册身份提供商时拿到的官方分配ID,不可填写固定值"tapkey"aud:替换原audience字段,固定值为https://login.tapkey.com,不可填写"local"sub:替换原subject字段,值为你创建IdentityProviderUser时传入的IpId也就是"myIpUserID1",不要填写Tapkey返回的系统内部User-IDiat:令牌签发时间戳,单位为秒exp:令牌过期时间戳,单位为秒,有效期最长不超过3600秒,你当前的配置符合要求
校验JWT签名有效性
你Header中声明的签名算法为RS256,必须确保签名使用的是你在Tapkey后台绑定的身份提供商公钥对应的私钥,签名算法严格匹配RS256,不可使用HS256等其他算法。检查时间戳偏差
确认生成JWT的设备系统时间与标准UTC时间同步,偏差不能超过5分钟,避免服务端判定令牌过期或未生效。如果生成令牌后间隔几秒才发起请求,可以将iat设置为Time.now.to_i - 10预留偏差缓冲。核对接口请求参数
确认调用https://login.tapkey.com/connect/token接口时的表单参数完全符合要求:grant_type固定为urn:ietf:params:oauth:grant-type:token-exchangesubject_token_type固定为urn:ietf:params:oauth:token-type:jwtsubject_token填写完整的JWT字符串client_id填写Tapkey后台分配给你的客户端IDscope填写你需要申请的权限,至少包含tapkey:api:access
内容的提问来源于stack exchange,提问作者Moritz Fröhlich
相关产品推荐
相关产品推荐

