При обмене кода гранта Amazon Alexa на токен доступа, где находятся учетные данные?

Я пытаюсь написать конечные точки обмена и доступа, а также документы здесь (https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/linking-an-alexa-пользователь-с-пользователем-в-вашей-системе#h2_login) неясны несколько моментов:

  1. как выполняется вызов для обмена кодом гранта на токен доступа - это GET с учетными данными в QS или это POST с учетными данными в теле?

  2. Доставляется ли токен доступа только в формате JSON для намеренного вызова или он правильно установлен как токен носителя?


person Ben Drury    schedule 24.01.2017    source источник


Ответы (1)


  1. Это POST с учетными данными в теле запроса. В этом случае Amazon правильно следует RFC Oauth2.
  2. Токен доступа доставляется 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
    
person Noah Gilmore    schedule 24.01.2017
comment
Спасибо. Документы были бесполезны в этом... Я использую NodeJS, поэтому мне нужно будет создать пользовательскую проверку для Alexa, и это нормально, теперь я знаю, как это работает! (Также нужно взломать токен CSRF!) - person Ben Drury; 25.01.2017
comment
Да, мне также пришлось взломать токен CSRF. Удачи! - person Noah Gilmore; 25.01.2017
comment
Привет, Ной, я тоже пытаюсь использовать django-oauth-toolkit с набором навыков Alexa, но у меня с ним кошмар! Постоянно пишет Невозможно связать __ навык, повторите попытку позже. Я только что использовал конечные точки по умолчанию, предоставленные django-oauth-toolkit. Требуется ли какая-либо настройка, чтобы заставить его работать с комплектом Alexa Skills? Любая помощь приветствуется! - person zubhav; 21.11.2017
comment
Привет @zubhav, да, нужно немного подправить. Не уверен, как далеко вы продвинулись в этом процессе. Вам нужно убедиться, что в вашем веб-приложении правильно зарегистрировано приложение для вашего навыка Alexa (т. е. вам нужно развернуть свое веб-приложение, затем войти в административную панель django, а затем создать новую модель приложения). Оттуда вам нужно будет скопировать идентификатор клиента и секрет клиента в конфигурацию навыков Alexa, а также выполнить взлом, который я отметил в ответе, с токеном. Чтобы начать отладку, я бы порекомендовал просмотреть журналы рабочего веб-приложения, чтобы убедиться, что запросы OAuth поступают. - person Noah Gilmore; 03.12.2017
comment
Привет, я выполнил все эти шаги с настройками конфигурации по умолчанию набора инструментов OAuth. Не знаю, что может пойти не так, я проверю запросы на сервере и вернусь к вам... Еще раз спасибо! - person zubhav; 06.12.2017