Alexa Skill с Azure AD B2 C Срок действия аутентификации истекает через час - PullRequest
0 голосов
/ 17 марта 2020

В настоящее время я создаю навык Alexa с поддержкой Azure функций (. NET Core / C#) и Azure AD B2 C для аутентификации.

Для начальной настройки: Я использовал в основном использованные инструкции, найденные в этой статье . Поскольку статья была написана пару лет назад go, мне пришлось внести несколько изменений. В итоге я получил следующую конфигурацию:

Azure Active Directory B2 C

Как я уже говорил, мы используем AAD B2 C для аутентификации. Пользователи связанных приложений могут зарегистрироваться и войти в приложение React. Идея состоит в том, чтобы предоставить альтернативный интерфейс для указанных пользователей с помощью Alexa намерений + высказываний.

Я создал приложение для Alexa в AAD B2 C со следующими настройками:

Свойства

  • Веб-приложение / веб-API: Да
  • Разрешить неявный поток: Да
  • Ответные URL: я ввел значения, предоставленные настройкой навыка Alexa (например, https://pitangui.amazon.com/api/skil/link/..). Есть три разных. Я также добавил один для моего azure функционального приложения (это может быть неправильно. Это было частью того, что я делал при диагностике других более ранних проблем); это в формате: https://myfuncname.azurewebsites.net/.auth/login/aad/callback (мне это вообще нужно ???)
  • URI идентификатора приложения: https://myorg.onmicrosoft.com/alexa
  • Включить Собственный клиент: Нет

Ключи

Я сгенерировал один Ключ приложения , который я использую в качестве Секрета в Связи учетной записи раздел в консоли разработчика Alexa.

Во многих примерах в Интернете упоминается установка здесь явной даты окончания срока действия в 1 или 2 года; тем не менее, я не представлен ни с какими опциями вообще (то есть без опциона на истечение срока действия), только код. Может ли это быть частью проблемы ???

Доступ к API

  • В разделе Опубликованные области действия имя области действия - user_impersonation. Описание «Доступ к этому приложению от имени вошедшего в систему пользователя». Полное значение области действия: https://myorgsname.onmicrosoft.com/alexa/user_impersonation.

Для доступа к API я должен ввести здесь записи API:

  • Тот, который использует user_impersonation область действия, упомянутая выше.
  • Второй, озаглавленный «Доступ к профилю пользователя», использует:
    • Получить id_token для пользователей (openid)
    • Получить идентификатор обновления для пользователей (offline_access)

AAD B2 C Поток пользователей

Используемый мной поток пользователей позволяет регистрироваться и выполнять вход, он использует следующее конфигурация:

Свойства

Mis c

  • Включить JavaScript принудительное использование макета страницы (предварительный просмотр): Вкл

Время жизни токена

  • Время жизни токена доступа и идентификатора (минут): 60
  • Refre sh Время жизни токена (дни): 14
  • Refre sh Время жизни скользящего окна токена: «Ограничено».
  • Продолжительность жизни (дни): 90

Настройки совместимости токена

  • Эмитент (iss) претензия: https://<domain>/<b2c-tenant-guid>* 110 5 *
  • Тема (под) утверждение: ObjectID
  • Заявка, представляющая поток пользователя: tfp

Поведение сеанса

  • Время жизни сеанса веб-приложения (минуты ): 1440
  • Тайм-аут сеанса веб-приложения: переходящий
  • Конфигурация единого входа: Арендатор
  • Требуется идентификатор токена в запросах на выход из системы: Нет

Azure Промежуточное программное обеспечение аутентификации функции

Для уровня аутентификации в функции Azure я использую метод, описанный в статье, упомянутой выше .

Alexa Консоль разработчика

Что касается Alexa, у меня есть очень простая настройка навыков со следующими настройками:

Конечная точка

Моя конечная точка использует HTTPS опция с областью по умолчанию, установленной на полностью определенную конечную точку HTTPS функции-обработчика моего Azure приложения функции.

Сертификат, установленный на "Моя конечная точка разработки, является поддоменом домена, который имеет подстановочный знак ... "

Связывание учетной записи

Настройки привязки учетной записи описаны ниже:

  • Разрешено ли использование для создания учетной записи или ссылки на ...: Включено
  • Разрешить пользователям включать навык без привязки к учетной записи: Включено
  • Разрешить пользователям связывать свою учетную запись с вашим навыком в приложении или на веб-сайте: Выключено
  • Предоставление кода авторизации: Включено
  • URI авторизации: https://myorg.b2clogin.com/myorg.onmicrosoft.com/oauth2/v2.0/authorize?p=<sign-in-user-flow-policy-name>
  • URI токена доступа: https://myorg.b2clogin.com/myorg.onmicrosoft.com/oauth2/v2.0/token?p=<sign-in-user-flow-policy-name>
  • Ваш идентификатор клиента: AAD B2 C GUID приложения
  • Ваш секрет: Ключ Сгенерировано в настройках приложения в AAD B2 C для моего приложения Alexa Skill (упомянуто в информации о настройке AAD B2 C выше).
  • Ваша схема аутентификации: HTTP Basi c
  • Область действия: openid и https://myorg.onmicrosoft.com/alexa/user_impersonation
  • Список доменов: login.microsoftonline.com и myorg.b2clogin.com Примечание: Это, вероятно, неправильно, так как я не знал, что здесь поставить. В приведенной выше статье этот параметр вообще не упоминается
  • Время истечения токена доступа по умолчанию: 3600

Примечание: URL-адреса перенаправления Alexa в нижней части - это то, что я вставил AAD B2 C для раздела URL ответа .

Проблема

Теперь для самой важной части Проблема . Кажется, сначала все работает ... Я могу go на alexa.amazon.com и использовать Ссылка на учетную запись (которая перенаправляет меня на и с моего экрана входа, управляемого AAD B2 C) ). Как только я связываю учетные записи, я могу успешно использовать высказывание и получить ответ.

Проблемы начинаются, когда я жду час (я полагаю, что это час). Попытка инициировать намерение через час приводит к ошибке на стороне приложения Azure Function, когда он пытается проверить токен аутентификации.

Может кто-нибудь дать мне несколько советов относительно того, что я мог неправильно настроить или хотя бы некоторые вещи, которые я должен изучить? Как я упоминал в начале этого вопроса, многие из ссылок, которые я нахожу в Интернете, устарели и не охватывают все настройки, которые я ожидаю использовать. Многие из них все еще используют авторитет microsoftonline.com против b2clogin.com.

На первый взгляд, я предполагаю, что проблема заключается в том, что навык Alexa не может обновить sh свой токен после истекает через час. Что мне нужно сделать, чтобы обеспечить правильное обновление?

1 Ответ

1 голос
/ 21 марта 2020

Я думаю, что на данный момент у меня достаточно информации, чтобы go опередить и ответить на свой вопрос. Я обнаружил, что область действия offline_access необходима для того, чтобы Token Refre sh был возможен.

Для Microsoft, "Область offline_access предоставляет вашему приложению доступ к ресурсам от имени пользователя для расширенное время. На странице согласия эта область отображается как разрешение «Поддерживать доступ к данным, к которым вы предоставили доступ». Когда пользователь утверждает область offline_access, ваше приложение может получать маркеры refre sh с платформы идентификации Microsoft. конечная точка токена. Refre sh токены являются долгоживущими. Ваше приложение может получать новые токены доступа по истечении срока действия старых. ".

Подробнее об этом можно прочитать здесь .

Чтобы решить эту проблему, я обеспечил доступность этой области в AAD B2 C и добавил ее в качестве ссылки область действия в консоли разработчика Alexa.

...