调用TinkOAuthApi返回未提供可识别认证方式错误如何解决
问题说明
调用Tink OAuth API的token端点,传入client_id、client_secret和授权码兑换access token时,接口返回如下错误:
"errorMessage" : "No recognized authentication method was provided."
调用使用的原始代码:
curl -v https://api.tink.com/api/v1/oauth/token ^ -d 'code=50a8d556c64b4a29af74faf3dce38bf4' ^ -d 'client_id=${a5bf840f7e2a44a58b20dab576bd18be}' ^ -d 'client_secret=${5c04d2ce35bb483cb916dc520d0da8c0}' ^ -d 'grant_type=authorization_code'
错误原因
client_id和client_secret的参数值外层被错误套了${}符号,这是Shell环境中引用变量的语法,在没有提前定义对应变量的情况下,传给服务端的是带${}的错误字符串,不是真实的客户端凭证,服务端无法识别到合法的认证信息- Tink的token端点支持两种客户端认证方式:表单参数传递client_id/client_secret、HTTP Basic Auth传递凭证,两种方式都要求传递正确的凭证值,参数格式错误时就会触发该报错
- 命令里的
^是Windows CMD终端的换行符,如果在Linux/macOS环境执行,需要把换行符替换为\
修复方法
方法1:修正表单参数格式
去掉参数值外层多余的${},直接传入真实的凭证值,Windows CMD环境执行命令如下:
curl -v https://api.tink.com/api/v1/oauth/token ^ -d "code=50a8d556c64b4a29af74faf3dce38bf4" ^ -d "client_id=a5bf840f7e2a44a58b20dab576bd18be" ^ -d "client_secret=5c04d2ce35bb483cb916dc520d0da8c0" ^ -d "grant_type=authorization_code"
Linux/macOS环境把所有行尾的^替换为\即可。
方法2:使用HTTP Basic Auth传凭证(官方推荐)
把client_id作为Basic Auth的用户名、client_secret作为密码传递,不需要在表单中重复传这两个参数,兼容性更好:
curl -v https://api.tink.com/api/v1/oauth/token ^ -u "a5bf840f7e2a44a58b20dab576bd18be:5c04d2ce35bb483cb916dc520d0da8c0" ^ -d "code=50a8d556c64b4a29af74faf3dce38bf4" ^ -d "grant_type=authorization_code"
校验点
如果修正格式后还是报错,逐一检查以下项:
- 授权码
code和当前使用的client_id是绑定的,没有跨客户端使用 - 授权码没有过期,授权码默认有效期10分钟,且仅能使用一次
- Tink客户端没有配置强制要求MTLS等其他认证方式
- 不要手动给请求加
Content-Type: application/json头,curl传-d参数默认的application/x-www-form-urlencoded格式才符合接口要求
内容的提问来源于stack exchange,提问作者christabel quarshie
相关产品推荐
相关产品推荐

