当前位置: 首页 > 知识库问答 >
问题:

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

计燕七
2023-03-14
curl -v -H "Content-Type:application/x-www-form-urlencoded" -d @body.txt -X POST https://oauth-login.cloud.huawei.com/oauth2/v3/token
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工作?

共有1个答案

弘承运
2023-03-14

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

如果需要,可以通过curl--data-urlencode“para1=value1”来内联编码

请参阅:Link或使用联机工具,如:Link

 类似资料:
  • 我正在创建一个小的YouTube Analytics API脚本,我一直在尝试用用户授权码交换访问令牌。 我已经设法获得了授权令牌,但是我不知道如何“向Google提交POST请求”。 我认为这是可行的: 但我不知道在条件之间放什么才能真正交换代码。当我访问该位置时 https://accounts.google.com/o/oauth2/code={代码} 我得到一个未知的URL。

  • 我遇到了使用文档签名 API 的第一个障碍,需要一些帮助。 我将docusignrestapi集合导入到Postman中。我设置了iKey、iSec、encodedKeys和codeFromUrl变量。 当尝试发送'01-授权代码授予访问令牌'post API时,我每次都得到以下响应。 我尝试从Postman中删除所有内容,包括环境,并从DocuSign中删除该应用程序,然后重新开始,以便我的所有

  • 为什么当我试图从这里的主机获取信息时,我会收到401错误? 我在用我的代币,那不是应该给我完全的权限吗?

  • 我认为服务URL有问题。我错了吗? 有谁能提供工作URL吗?

  • 我正在尝试在多租户应用程序中实现 OAuth 2.0 授权代码流。 我首先在 请求了“openid 配置文件电子邮件”范围的授权,然后使用我获得的代码以及 、client_id、client_secret redirect_uri 作为访问令牌 我得到的响应只包含< code>id_token和< code>token_type=Bearer。为什么没有给我< code>access_token和

  • 我的问题是:为什么这是流动?我想是出于安全原因,但我想不通。为什么实现是这样的,而不是在第一次调用(“/authorize”)之后立即获得访问令牌? 我们为什么需要这个代码?