Работа с токенами OAuth при проверке подлинности Службы приложений Azure

В этой статье показано, как работать с токенами OAuth при использовании встроенной проверки подлинности и авторизации в Службе приложений.

Извлечение токенов в коде приложения

Токены, предоставляющиеся поставщиком, вводятся в заголовке запроса из кода сервера, что позволяет легко получить к ним доступ. В следующей таблице показаны возможные заголовки токена.

Provider Имена заголовков
ИД Microsoft Entra X-MS-TOKEN-AAD-ID-TOKEN
X-MS-TOKEN-AAD-ACCESS-TOKEN
X-MS-TOKEN-AAD-EXPIRES-ON
X-MS-TOKEN-AAD-REFRESH-TOKEN
Токен Facebook X-MS-TOKEN-FACEBOOK-ACCESS-TOKEN
X-MS-TOKEN-FACEBOOK-EXPIRES-ON
Google X-MS-TOKEN-GOOGLE-ID-TOKEN
X-MS-TOKEN-GOOGLE-ACCESS-TOKEN
X-MS-TOKEN-GOOGLE-EXPIRES-ON
X-MS-TOKEN-GOOGLE-REFRESH-TOKEN
Twitter X-MS-TOKEN-TWITTER-ACCESS-TOKEN
X-MS-TOKEN-TWITTER-ACCESS-TOKEN-SECRET

Примечание.

В различных языковых платформах эти заголовки могут быть представлены в коде приложения в различных форматах, например строчными или прописными буквами.

Отправьте из клиентского кода (например, мобильного приложения или JavaScript в браузере) HTTP-запрос GET для /.auth/me (необходимо включить хранилище токенов). В возвращаемом JSON-файле будут содержаться предоставляемые поставщиком токены.

Примечание.

Токены доступа предназначены для получения доступа к ресурсам поставщика, поэтому они заданы, только если настройка поставщика осуществляется с помощью секрета клиента. Дополнительные сведения о том, как получить токены обновления, см. в разделе об обновлении маркеров доступа.

Обновление маркеров проверки подлинности

По истечении срока действия маркера доступа вашего провайдера (а не токена сеанса) необходимо повторно подтвердить подлинность пользователя, прежде чем снова использовать этот маркер. Истечения срока действия токена можно избежать, выполнив вызов GET к конечной точке приложения /.auth/refresh. При этом Служба приложений автоматически обновляет маркеры доступа в хранилище токенов для пользователя, прошедшего аутентификацию. В результате последующих запросов на токены с помощью кода приложения будут возвращаться обновленные токены. Однако для правильного обновления токена в хранилище токенов должны содержаться токены обновления для поставщика. Способ получения токенов обновления документируется каждым поставщиком, но ниже приведено краткое описание.

  • Google. Добавьте параметр строки запроса access_type=offline к вызову API /.auth/login/google. Дополнительные сведения см. в разделе "Токены обновления Google".

  • Facebook. Не предоставляет токены обновления. Срок действия токенов с долгим временем существования истекает через 60 дней (см. раздел об истечении и продлении срока действия токенов доступа Facebook).

  • Twitter. Срок действия токенов доступа не истекает (см. раздел о часто задаваемых вопросах о Twitter OAuth).

  • Microsoft: на сайте https://resources.azure.com выполните следующие действия:

    1. В верхней части страницы выберите Read/Write (Чтение и запись).

    2. В левой части браузера перейдите к разделу subscriptions><имя_подписки>>resourceGroups><имя_группы_ресурсов>>поставщики>Microsoft.Web>сайты><имя_приложения>>config>authsettingsV2.

    3. Выберите Изменить.

    4. Измените следующее свойство.

      "identityProviders": {
        "azureActiveDirectory": {
          "login": {
            "loginParameters": ["scope=openid profile email offline_access"]
          }
        }
      }
      
    5. Щелкните Put.

    Примечание.

    Областью, которая предоставляет маркер обновления, является offline_access. Сведения об использовании см. в руководстве по сквозной проверке подлинности и авторизации в Службе приложений Azure. Другие области по умолчанию запрашиваются Службой приложений. Сведения об этих областях по умолчанию см. в разделе Области OpenID Connect.

После настройки поставщика можно найти токен обновления и срок действия для токена доступа в хранилище токенов.

Обновить маркер доступа можно в любой момент, вызвав команду /.auth/refresh на любом языке. В следующем фрагменте кода jQuery используется для обновления токенов доступа из клиента JavaScript.

function refreshTokens() {
  let refreshUrl = "/.auth/refresh";
  $.ajax(refreshUrl) .done(function() {
    console.log("Token refresh completed successfully.");
  }) .fail(function() {
    console.log("Token refresh failed. See application logs for details.");
  });
}

Если пользователь отменяет разрешения, предоставленные приложению, вызов /.auth/me может завершиться ошибкой 403 Forbidden. Чтобы выполнить диагностику ошибок, проверьте дополнительные сведения в журналах приложений.

Продление льготного периода срока действия токена сеанса

Сеанс проверки подлинности истекает через 8 часов. По истечении срока действия авторизованного сеанса по умолчанию предоставляется 72-часовой льготный период. В течение этого льготного периода токен сеанса можно обновить с помощью Службы приложений без повторной проверки подлинности пользователя. Если токен сеанса становится недействительным, вы можете просто вызвать /.auth/refresh, и вам не нужно самостоятельно отслеживать истечение срока действия токена. После завершения 72-часового льготного периода пользователь должен выполнить вход в систему, чтобы получить действительный токен сеанса.

Если 72 часов не достаточно, можно продлить этот льготный период. Значительное продление этого периода может повлиять на уровень безопасности (например, токен проверки подлинности может быть утерян или украден). В связи с этим следует оставить значение по умолчанию (72 часа) или установить для периода продления наименьшее значение.

Чтобы продлить льготный период истечения срока действия по умолчанию, выполните следующую команду в Cloud Shell.

az webapp auth update --resource-group <group_name> --name <app_name> --token-refresh-extension-hours <hours>

Примечание.

Льготный период применяется только к сеансу, проверка подлинности для которого осуществлялась с помощью службы приложений, а не токенов, предоставляемых поставщиками удостоверений. Льготный период на предоставленные поставщиком токены, срок действия которых истек, не распространяется.

Следующие шаги