Amazon Alexa получить токен доступа - PullRequest
0 голосов
/ 03 августа 2020

Я пишу навык SmartHome и мне нужен токен доступа для публикации асинхронных уведомлений для устройства (дверной звонок). Документация сбивает с толку, но из того, что я предположил, я должен получить свои client_id и client_secret из консоли Alexa и получить токен носителя во время первоначального подключения / авторизации навыка, а затем запросить токен доступа (и refre sh токен) через OAuth. Таким образом, я могу получить эти три части информации, но затем я пытаюсь сделать:

curl -vv X POST -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' -d "\
grant_type=authorization_code\
&code=$CODE\
&client_id=$CLIENT_ID\
&client_secret=$CLIENT_SECRET" \
https://api.amazon.com/auth/o2/token

Где CODE пришел из первоначального запроса авторизации как:

        "payload": {
            "grant": {
                "code": "<<REDACTED>>",
                "type": "OAuth2.AuthorizationCode"
            },

Но это всегда дает мне :

{"error_description":"The request has an invalid parameter : code","error":"invalid_grant"}

Если я удаляю параметр code, он жалуется, что он отсутствует, а если я меняю код на что-то недопустимое , ошибка изменится с invalid_grant на invalid_request. Таким образом, он понимает код, но ему что-то не нравится во всем этом потоке.

(я знаю, что client_id, client_secret и grant_types действительны, потому что, когда я меняю их на что-то намеренно ошибочное , Я получаю ожидаемую ошибку).

Есть идеи, что я делаю не так ??

1 Ответ

0 голосов
/ 03 августа 2020

Код можно использовать только один раз - независимо от того, успешно он или нет. Поэтому, даже если вы используете его, а ваш запрос ошибочен или не работает по другим причинам, вы не можете использовать его повторно. Единственное, что я смог справиться с этим, - это отключить навык, снова включить его, затем sn oop и использовать указанный код new .

...