Аутентификация и авторизация в Службе приложений Azure и Функциях Azure

Служба приложений Azure предоставляет встроенные возможности проверки подлинности и авторизации (иногда называемые "EasyAuth"), поэтому для входа пользователей в систему и предоставления доступа к данным необходимо написать минимальный код или обойтись без кода в веб-приложении, RESTfu API и серверной части мобильных приложений, а также в Функциях Azure. В этой статье описывается, как служба приложений помогает упростить проверку подлинности и авторизацию для вашего приложения.

Зачем использовать встроенную проверку подлинности?

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

Реализация безопасного решения для аутентификации (входа пользователей) и авторизации (предоставление доступа к защищенным данным) может потребовать значительных трудозатрат. Необходимо соблюдать отраслевые рекомендации и стандарты и обеспечить актуальность реализуемого решения. Встроенная функция проверки подлинности для Службы приложений и Функций Azure позволяет экономить время и сократить трудозатраты, предоставляя встроенную проверку подлинности с помощью федеративных поставщиков удостоверений, что дает возможность сосредоточиться на остальной части вашего приложения.

  • Служба приложений Azure позволяет интегрировать различные возможности проверки подлинности с веб-приложением или API, лишая вас необходимости реализовывать их самостоятельно.
  • Она встроена непосредственно в платформу и для использования не требует какого бы то ни было опыта работы с конкретным языком, пакетом SDK или средством обеспечения безопасности или даже какого-либо кода.
  • Можно выполнить интеграцию с несколькими поставщиками входа. Например, Azure AD, Facebook, Google, Twitter.

Поставщики удостоверений

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

Поставщик Конечная точка входа Практическое руководство
Платформа удостоверений Майкрософт /.auth/login/aad Вход через платформу удостоверений Майкрософт в Службе приложений
Facebook /.auth/login/facebook Вход через Facebook в Службе приложений
Google /.auth/login/google Вход через Google в Службе приложений
Twitter /.auth/login/twitter Вход через Twitter в Службе приложений
Любой поставщик OpenID Connect /.auth/login/<providerName> Вход через OpenID Connect в Службе приложений

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

Рекомендации по использованию встроенной проверки подлинности

Включение этой возможности приведет к автоматическому перенаправлению всех запросов к приложению по протоколу HTTPS независимо от параметра конфигурации Службы приложений для принудительного применения HTTPS. Это можно отключить с помощью параметра requireHttps в конфигурации V2. Однако мы рекомендуем использовать протокол HTTPS, и вы должны позаботиться о том, чтобы маркеры безопасности не передавались через небезопасные соединения HTTP.

Службу приложений можно использовать для проверки подлинности с ограничением или без ограничения доступа к содержимому и API сайта. Чтобы предоставить доступ к приложению только пользователям, прошедшим проверку подлинности, для параметра Предпринимаемое действие, если проверка подлинности для запроса не выполнена установите вход с помощью одного из настроенных поставщиков удостоверений. Чтобы выполнять проверку подлинности, но не ограничивать доступ, для параметра Предпринимаемое действие, если проверка подлинности для запроса не выполнена установите "Разрешить анонимные запросы (нет действия)".

Примечание

Каждой регистрации приложения следует назначить свое разрешение и согласие. Создайте отдельные регистрации приложений для отдельных слотов развертывания, чтобы не предоставлять общий доступ к разрешениям в средах. Это поможет предотвратить проблемы с рабочим приложением при тестировании нового кода.

Принцип работы

Архитектура функций

Поток аутентификации

Поведение авторизации

Хранилище токенов

Ведение журнала и трассировка

Архитектура функций

Компонент ПО промежуточного слоя проверки подлинности и авторизации — это функция платформы, которая работает на той же виртуальной машине, что и приложение. Если он включен, каждый входящий HTTP-запрос проходит через него перед обработкой в коде вашего приложения.

An architecture diagram showing requests being intercepted by a process in the site sandbox which interacts with identity providers before allowing traffic to the deployed site

ПО промежуточного слоя платформы выполняет для приложения несколько задач:

  • проверка подлинности пользователей и клиентов у указанных поставщиков удостоверений;
  • проверка, хранение и обновление токенов OAuth, выданных настроенными поставщиками удостоверений;
  • управление сеансом с проверкой подлинности;
  • вставка сведений об удостоверении в заголовки HTTP-запросов.

Модуль выполняется отдельно от кода приложения и настраивается с помощью параметров Azure Resource Manager или файла конфигурации. Какие-либо пакеты SDK, определенные языки программирования или изменения кода приложения не требуются.

Архитектура функций в Windows (без развертывания контейнера)

Модуль проверки подлинности и авторизации выполняется в качестве собственного модуля IIS в той же песочнице, что и код приложения. Если он включен, каждый входящий HTTP-запрос проходит через него перед обработкой в коде вашего приложения.

Архитектура функций в Linux и контейнерах

Модуль проверки подлинности и авторизации выполняется в отдельном контейнере, изолированном от кода приложения. Используя так называемый Шаблон посредника, он взаимодействует с входящим трафиком для выполнения тех же функций, что и в Windows. Поскольку он не выполняется внутри процесса, прямая интеграция с конкретными языковыми платформами невозможна. Однако соответствующие сведения, необходимые вашему приложению, передаются с помощью заголовков запросов, как описано ниже.

Поток проверки подлинности

Поток проверки подлинности одинаков для всех поставщиков, но будет различным для разных способов входа в систему: с использованием пакета SDK поставщика или без.

  • Без использования пакета SDK поставщика. Приложение делегирует федеративный вход в службу приложений. Обычно это относится к приложениям браузера, которые могут предоставить пользователю страницу входа поставщика. Код сервера управляет процессом входа, поэтому он также называется управляемым сервером потоком или потоком сервера. Этот вариант применяется к браузерным приложениям. Он также относится к собственным приложениям, в которых вход пользователей в систему выполняется с помощью пакета SDK для клиента мобильных приложений. Пакет SDK открывает веб-представление, в котором пользователи выполняют вход с помощью проверки подлинности службы приложений.
  • С использованием пакета SDK поставщика. Вход пользователей в приложение на странице поставщика выполняется вручную, а затем приложение отправляет маркер проверки подлинности в Службу приложений Azure для проверки. Обычно это относится к внебраузерным приложениям, которые не могут предоставить пользователю страницу входа в систему. Код приложения управляет процессом входа, поэтому его также называют управляемым клиентом потоком или потоком клиента. Этот вариант применяется к REST API, Функциям Azure и клиентам браузера JavaScript, а также к браузерным приложениям, которым требуется больше гибкости при входе в систему. Это также относится к собственным мобильным приложениям, в которых вход пользователей в систему выполняется с помощью пакета SDK поставщика.

Вызовы из доверенного приложения браузера в Службе приложений к другому REST API в Службе приложений или Функциях Azure могут проходить проверку подлинности с помощью управляемого сервером потока. Дополнительные сведения см. в статье о настройке входа и выхода.

В приведенной ниже таблице показаны шаги выполнения потока проверки подлинности.

Шаг Без использования пакета SDK поставщика С использованием пакета SDK поставщика
1. Вход пользователя Перенаправляет клиента к /.auth/login/<provider>. Код клиента выполняет вход пользователя непосредственно через пакет SDK поставщика и получает токен проверки подлинности. Дополнительные сведения см. в документации поставщика.
2. Действия после проверки подлинности Поставщик перенаправляет клиент к /.auth/login/<provider>/callback. Код клиента отправляет маркер от поставщика в /.auth/login/<provider> для проверки.
3. Установка проверенного сеанса Служба приложений добавляет файлы cookie, прошедшие проверку подлинности, в ответ. Служба приложений возвращает собственный токен проверки подлинности в код клиента.
4. Обработка содержимого, прошедшего проверку подлинности Клиент включает файлы cookie, прошедшие проверку подлинности, в последующие запросы (автоматически обрабатываются браузером). Код клиента предоставляет токен проверки подлинности в заголовке X-ZUMO-AUTH (автоматически обрабатывается пакетами SDK для клиента мобильных приложений).

Для клиентских браузеров служба приложений может автоматически перенаправлять всех не прошедших проверку пользователей к /.auth/login/<provider>. Вы также можете отправить пользователям одну или несколько ссылок /.auth/login/<provider>, чтобы они вошли в ваше приложение с использованием поставщика по выбору.

Поведение авторизации

На портале Azure можно настроить Службу приложений, используя несколько вариантов поведения в случае, если поступающий запрос не прошел проверку подлинности. Ниже описаны возможные варианты.

Разрешить запросы, не прошедшие проверку подлинности

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

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

Требовать проверку подлинности

Этот параметр отклоняет направляющийся в приложение трафик, не прошедший проверку подлинности. Такое отклонение может заключаться в перенаправлении в один из настроенных поставщиков удостоверений. В таких случаях клиент браузера перенаправляется в /.auth/login/<provider> для выбранного поставщика. Если анонимный запрос поступает из собственного мобильного приложения, возвращаемый ответ HTTP 401 Unauthorized. Можно также настроить отклонение на возврат ответа HTTP 401 Unauthorized или HTTP 403 Forbidden для всех запросов.

В этом случае в клиентском приложении не нужен код для проверки подлинности. Более точная авторизация, например авторизация для конкретной роли, может выполняться путем проверки утверждений пользователя (см. раздел Access user claims (Доступ к утверждениям пользователя)).

Внимание!

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

Примечание

По умолчанию любой пользователь в клиенте Azure AD может запросить токен для вашего приложения из Azure AD. Вы можете настроить приложение в Azure AD, если хотите предоставить доступ к приложению только определенной группе пользователей.

Хранилище токенов

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

  • опубликовать запись в ленте Facebook прошедшего проверку подлинности пользователя;
  • считать корпоративные данные пользователя с помощью API Microsoft Graph;

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

Токены идентификатора, доступа и обновления кэшируются для проверенного сеанса. Они доступны только соответствующему пользователю.

Если вам не нужно использовать токены в приложении, можно отключить хранилище токенов на странице Проверка подлинности и авторизация приложения.

Ведение журнала и трассировка

Если вы включите ведение журнала приложений, вы увидите трассировку проверки подлинности и авторизации непосредственно в файлах журналов. Если появится неожиданная ошибка проверки подлинности, вы можете легко найти все сведения, просмотрев имеющиеся журналы приложений. Если вы включили трассировку неудачно завершенных запросов, вы можете точно определить, какую роль мог выполнять модуль проверки подлинности и авторизации в неудавшемся запросе. Найдите ссылки на модуль с именем EasyAuthModule_32/64 в журналах трассировки.

Дополнительные ресурсы

Примеры: