如何解决为什么我通过授权代码调用访问令牌交换失败?
我正在使用 Huawei account kit 的身份验证代码模式将用户登录到我的应用程序。为了检查应用服务器到帐户服务器的行为,我使用如下所示的 cURL 命令从授权代码中获取访问令牌。但是下面的命令会返回一个错误。
curl -v -H "Content-Type:application/x-www-form-urlencoded" -d @body.txt -X POST https://oauth-login.cloud.huawei.com/oauth2/v3/token
“body.txt”文件包含请求所需的信息:
grant_type=authorization_code&
code=DQB6e3x9zFqHIfkHR2ctp7htDs5tG5p6jXTkTCeoAAULtuS69PntuuD9pwqHrdXyvrlezuRc/aq+zuDU7OnQdRpImnvZcEX+RIOijYMXYu1j+zxpQ+W/J50Z7pY1qhyxZtavqkELY+6o2jSifaiIxC/MJc7KgqKV3jGn9kUIEZovSnM&
client_id=my_id&
client_secret=my_secrete&
redirect_uri=hms://redirect_uri
命令返回:
> POST /oauth2/v3/token HTTP/1.1
> Host: oauth-login.cloud.huawei.com
> User-Agent: curl/7.64.0
> Accept: */*
> Content-Type:application/x-www-form-urlencoded
> Content-Length: 430
>
* upload completely sent off: 430 out of 430 bytes
< HTTP/1.1 400 Bad Request
< Date: Mon,23 Nov 2020 03:38:21 GMT
< Content-Type: application/json
< Content-Length: 67
< Connection: keep-alive
< Cache-Control: no-store
< Pragma: no-cache
< Server: elb
<
* Connection #0 to host oauth-login.cloud.huawei.com left intact
{"sub_error":20152,"error_description":"invalid code","error":1101}
我应该怎么做才能使这个 API 调用按预期使用 cURL 工作?
解决方法
身份验证代码必须在发送前进行 urlencoded。问题中的命令使用了该代码,而没有对非字母字符进行 urlencoding。请使用与编码授权码相同的命令作为“code”的参数来执行获取访问令牌的请求
如果需要,可以通过内联方式进行编码 curl --data-urlencode "para1=value1"
只要参数正确编码为 %2x 格式,就可以使用其他工具获取访问令牌。
,根据错误信息Sequential
,问题是代码参数不正确。
建议您可以检查请求中code的值是否与手机APP获取的Authorization Code一致。
有关详细信息,请参阅 docs。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。