Amazon Alexa Получить токен доступа

Я пишу навык SmartHome, и мне нужен токен доступа для публикации асинхронных уведомлений для устройства (дверной звонок). Документация сбивает с толку, но из того, что я сделал вывод, я должен получить свой client_id и client_secret из консоли Alexa и получить токен носителя во время начального подключения/авторизации навыка, а затем запросить токен доступа (и токен обновления) через 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 допустимы, потому что когда я меняю их на что-то намеренно ошибочное, я получаю ожидаемую ошибку).

Любая идея, что я делаю неправильно ??


person Brad    schedule 03.08.2020    source источник


Ответы (1)


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

person Brad    schedule 03.08.2020