调用API获取Xero Access Token遇错及解决过程
Xero OAuth2 获取Access Token 问题排查与解决
问题背景
我创建了未通过手机认证应用验证的账户,因为这样无法实现自动化操作。完成授权流程步骤1后,从回调URL中解析得到code和state:
state=123456 code=vcciFJW_bFTjodGQnNUk7BIr-EoSBQSktn-cNUGdDjY
第一次请求及错误
使用RestAssured调用POST https://identity.xero.com/connect/token接口获取Access Token,请求详情:
Request method: POST Request URI: https://identity.xero.com/connect/token Proxy: <none> Request params: <none> Query params: <none> Form params: <none> Path params: <none> Headers: Authorization=Basic <此处为生成的base64编码数据> Accept=*/* Content-Type=application/x-www-form-urlencoded; charset=ISO-8859-1 Cookies: <none> Multiparts: <none> Body: { "grant_type" : "authorization_code", "redirect_uri" : "https://developer.xero.com/", "code" : "vcciFJW_bFTjodGQnNUk7BIr-EoSBQSktn-cNUGdDjY" }
返回结果:
400 {"error":"unsupported_grant_type"}
调整请求后仍报错
针对请求格式调整后,请求详情如下:
Request method: POST Request URI: https://identity.xero.com/connect/token Proxy: <none> Request params: <none> Query params: <none> Form params: grant_type=authorization_code code=3_Lli3YQYPyFlf_RoZJGRVE5iPGCeo-H9ta9htdr8ec redirect_uri=https://developer.xero.com/ Path params: <none> Headers: Authorization=Basic <base64编码字符串> Accept=*/* Content-Type=application/x-www-form-urlencoded; charset=ISO-8859-1 Cookies: <none> Multiparts: <none> Body: <none>
返回结果:
400 {"error":"unauthorized_client"}
问题解决
最终定位原因:登录授权时使用的redirect_uri末尾无斜杠,而调用token接口时使用的redirect_uri末尾带斜杠。根据Xero故障排查说明,两个URL必须完全一致,修正后问题解决。
内容的提问来源于stack exchange,提问作者alek88
相关产品推荐
相关产品推荐

