Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oauth 2.0 为什么从授权码调用访问令牌交换失败?_Oauth 2.0_Huawei Mobile Services_Huawei Developers_Huawei Account - Fatal编程技术网

Oauth 2.0 为什么从授权码调用访问令牌交换失败?

Oauth 2.0 为什么从授权码调用访问令牌交换失败?,oauth-2.0,huawei-mobile-services,huawei-developers,huawei-account,Oauth 2.0,Huawei Mobile Services,Huawei Developers,Huawei Account,我正在使用的身份验证码模式将用户登录到我的应用程序。为了检查appserver到accountserver的行为,我使用下面显示的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.

我正在使用的身份验证码模式将用户登录到我的应用程序。为了检查appserver到accountserver的行为,我使用下面显示的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}
>POST/oauth2/v3/token HTTP/1.1
>主机:oauth-login.cloud.huawei.com
>用户代理:curl/7.64.0
>接受:*/*
>内容类型:application/x-www-form-urlencoded
>内容长度:430
>
*上传已完全发送:430字节中的430字节

我应该怎么做才能让这个API调用像预期的那样使用cURL工作?

身份验证代码必须在发送之前进行URLCoded。问题中的命令使用的代码没有对非字母字符进行URL编码。请使用编码授权码作为“code”参数的同一命令来执行获取访问令牌的请求

如果需要,可以通过内联方式进行编码 curl--数据urlencode“para1=value1”

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


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

根据错误信息
{“sub_error”:20152,“error_description:“invalid code”,“error”:1101}
,问题是由错误的代码参数引起的

建议您检查请求中的代码值是否与移动应用获取的授权代码相同

有关详细信息,请参阅


详细信息非常有用。非常感谢。