Это POST с учетными данными в теле запроса. В этом случае Amazon правильно следует RFC Oauth2.
Токен доступа доставляется Amazon только в формате JSON для запроса намерения и не правильно устанавливается в качестве носителя. Это раздражает.
В моем случае мне пришлось взломать его, сначала проверив, был ли запрос действительным запросом Alexa, который содержал сеанс с токеном доступа, затем установил заголовок HTTP_AUTHORIZATION на Bearer <token>, а затем использовал существующую логику аутентификации запроса для аутентификации (я использовал Django с django-oauth-toolkit, поэтому YMMV, если вы используете что-то еще).
Этот код выглядит примерно так:
# get the access_token from the POST request
if access_token is not None:
request.META["HTTP_AUTHORIZATION"] = "Bearer " + access_token
if not hasattr(request, 'user') or request.user.is_anonymous():
user = authenticate(request=request)
if user:
request.user = request._cached_user = user
if request.user.is_authenticated():
# Do whatever with the logged in user
personNoah Gilmoreschedule24.01.2017
comment
Спасибо. Документы были бесполезны в этом... Я использую NodeJS, поэтому мне нужно будет создать пользовательскую проверку для Alexa, и это нормально, теперь я знаю, как это работает! (Также нужно взломать токен CSRF!)
- personBen Drury; 25.01.2017
comment
Да, мне также пришлось взломать токен CSRF. Удачи!
- personNoah Gilmore; 25.01.2017
comment
Привет, Ной, я тоже пытаюсь использовать django-oauth-toolkit с набором навыков Alexa, но у меня с ним кошмар! Постоянно пишет Невозможно связать __ навык, повторите попытку позже. Я только что использовал конечные точки по умолчанию, предоставленные django-oauth-toolkit. Требуется ли какая-либо настройка, чтобы заставить его работать с комплектом Alexa Skills? Любая помощь приветствуется!
- personzubhav; 21.11.2017
comment
Привет @zubhav, да, нужно немного подправить. Не уверен, как далеко вы продвинулись в этом процессе. Вам нужно убедиться, что в вашем веб-приложении правильно зарегистрировано приложение для вашего навыка Alexa (т. е. вам нужно развернуть свое веб-приложение, затем войти в административную панель django, а затем создать новую модель приложения). Оттуда вам нужно будет скопировать идентификатор клиента и секрет клиента в конфигурацию навыков Alexa, а также выполнить взлом, который я отметил в ответе, с токеном. Чтобы начать отладку, я бы порекомендовал просмотреть журналы рабочего веб-приложения, чтобы убедиться, что запросы OAuth поступают.
- personNoah Gilmore; 03.12.2017
comment
Привет, я выполнил все эти шаги с настройками конфигурации по умолчанию набора инструментов OAuth. Не знаю, что может пойти не так, я проверю запросы на сервере и вернусь к вам... Еще раз спасибо!
- personzubhav; 06.12.2017