Поделиться через


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

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

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

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

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

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
X 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 дней (см. долгоживущие маркеры доступа).

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

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

    1. В верхней части области выберите "Чтение и запись".

    2. В меню обозревателя перейдите к подписки>имя подписки>группы ресурсов>имя группы ресурсов>поставщики>Microsoft.Web>сайты>имя приложения>конфигурация>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 часа или задать для периода расширения наименьшее значение.

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

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

Примечание.

Льготный период применяется только к сеансу, прошедшему проверку подлинности в App Service, а не к токенам от провайдеров идентификации. Для токенов поставщика с истекшим сроком действия не предусмотрен льготный период.