2

我正在使用华为帐号套件的验证码模式将用户登录到我的应用程序。为了检查应用服务器到帐户服务器的行为,我使用如下所示的 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 工作?

4

2 回答 2

0

验证码必须在发送前进行 urlencoded。问题中的命令使用该代码而没有对非字母字符进行urlencoding。请使用带有编码授权码的相同命令作为“code”的参数来执行获取访问令牌的请求

如果需要,可以通过内联方式进行编码 curl --data-urlencode "para1=value1"

请参考: 链接或使用在线工具,例如:链接

只要参数以 %2x 格式正确编码,就可以使用其他工具获取访问令牌。

于 2021-01-24T16:09:28.760 回答
0

根据报错信息{"sub_error":20152,"error_description":"invalid code","error":1101},问题是代码参数不正确造成的。

建议您可以检查请求中code的值是否与移动应用获取的Authorization Code一致。

有关详细信息,请参阅文档

在此处输入图像描述

于 2021-01-25T02:01:20.430 回答