Почему не удалось выполнить мой запрос на обмен токенами доступа из кода авторизации?

#oauth-2.0 #huawei-mobile-services #huawei-developers #huawei-account

#oauth-2.0 #huawei-мобильные сервисы #huawei-разработчики #huawei-учетная запись

Вопрос:

Я использую режим кода аутентификации набора учетных записей Huawei для входа пользователей в мое приложение. Чтобы проверить поведение сервера приложений на сервере учетных записей, я использую команду 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_codeamp;
code=DQB6e3x9zFqHIfkHR2ctp7htDs5tG5p6jXTkTCeoAAULtuS69PntuuD9pwqHrdXyvrlezuRc/aq zuDU7OnQdRpImnvZcEX RIOijYMXYu1j zxpQ W/J50Z7pY1qhyxZtavqkELY 6o2jSifaiIxC/MJc7KgqKV3jGn9kUIEZovSnMamp;
client_id=my_idamp;
client_secret=my_secreteamp;
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:

Код аутентификации должен быть urlencoded перед отправкой. Команда в вопросе использовала этот код без urlencoding небуквенных символов. Пожалуйста, используйте ту же команду с закодированным кодом авторизации в качестве параметра для «code», чтобы выполнить запрос на получение токена доступа

Кодирование может быть выполнено встроенным, если это необходимо curl —data-urlencode «para1= value1»

Пожалуйста, обратитесь к: Link или с помощью онлайн-инструмента, такого как: Link

Использование других инструментов для получения токена доступа возможно, если параметры правильно закодированы в формате %2x.

Ответ №2:

Согласно информации об ошибке {"sub_error":20152,"error_description":"invalid code","error":1101} , проблема вызвана неправильными параметрами кода.

Рекомендуется, чтобы вы могли проверить, совпадает ли значение кода в запросе с кодом авторизации, полученным мобильным приложением.

ПОДРОБНОСТИ см. в документации.

введите описание изображения здесь

Комментарии:

1. Подробная информация очень полезна. Спасибо.