Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применяется:
Внешние клиенты (дополнительные сведения)
Когда мобильное приложение включает веб-функции, такие как страница обновления профиля или панель мониторинга вознаграждения, пользователи ожидают простого единого входа. Они не должны столкнуться со вторым запросом входа после того, как уже вошли через родное приложение.
В этой статье показано, как реализовать единый вход между родным мобильным приложением и веб-ресурсом, размещенным во встроенном веб-представлении (например, WKWebView в iOS или WebView в Android). В отличие от системных браузеров, внедренные веб-представления позволяют управлять сетевыми запросами до их отправки. Эта возможность позволяет приложению внедрять состояние проверки подлинности пользователя непосредственно в заголовки запросов.
Рекомендуемый поток работает следующим образом:
- Пользователь входит через родной пользовательский интерфейс мобильного приложения с помощью Native Auth SDK или родного API аутентификации.
- Перед загрузкой веб-представления приложение получает действительный маркер доступа из пакета SDK или API.
- Приложение загружает веб-интерфейс с пользовательским запросом, который включает токен доступа в заголовке
Authorization: Bearer <access_token>. - Веб-ресурс проверяет маркер и немедленно предоставляет доступ.
На следующей схеме показано взаимодействие между веб-ресурсом, мобильным приложением, пакетом SDK и службой удостоверений (ESTS):
Необходимые условия
- Мобильное приложение с собственной проверкой подлинности, настроенное с помощью собственного пакета SDK проверки подлинности или собственного API проверки подлинности. Если вы используете пакет SDK и еще не настроили приложение, см. статью "Подготовка приложения Android для собственной проверки подлинности " или "Подготовка приложения iOS/macOS для собственной проверки подлинности".
- Завершенный процесс входа в ваше родное приложение. Инструкции см. в разделе "Вход пользователей в мобильном приложении Android " или " Вход пользователей" в мобильном приложении iOS.
- Веб-ресурс, обслуживающийся по протоколу HTTPS (TLS). Не отправляйте токены по протоколу HTTP.
- Общее удостоверение клиента (идентификатор приложения) между мобильным приложением и веб-ресурсом. Дополнительные сведения см. в разделе "Ограничения и требования к конфигурации".
Вход с помощью встроенной аутентификации
Выполните стандартный поток входа с помощью Native Auth SDK или родного API аутентификации. При успешном входе с помощью SDK он безопасно кэширует токен доступа, ID токен и токен обновления. Если вы используете API напрямую, ваше приложение отвечает за безопасное хранение маркеров, которые он получает.
Для получения подробных инструкций по реализации входа, см. статью:
- Android: вход пользователей в мобильное приложение Android (Kotlin)
- iOS/macOS: вход пользователей в мобильное приложение iOS (Swift)
Получение токена доступа
Когда пользователь выполняет действие, чтобы открыть веб-представление, убедитесь, что приложение имеет действующий и не истекший маркер доступа перед загрузкой веб-ресурса.
Если вы используете Native Auth SDK, запросите токен в фоновом режиме. Пакет SDK предоставляет метод, который получает действительный getAccessToken() маркер из кэша или автоматически обновляет его. Дополнительные сведения о получении маркеров доступа с определенными областями см. в статье:
- Android: получение нескольких токенов доступа
- iOS/macOS: получение нескольких токенов доступа
Если вы используете собственный API аутентификации непосредственно, ваше приложение получает токены через конечную точку API /oauth/v2.0/token. Для получения дополнительных сведений см. справочник по API нативной аутентификации.
Запросите токен с точными правами доступа, необходимыми для веб-ресурса. Требования к области см. в разделе "Ограничения" и требования к конфигурации.
Загрузка веб-просмотра с проверкой подлинности
Существует два метода передачи состояния аутентификации в веб-вид. Рекомендуемый подход использует заголовки авторизации. Резервная версия на основе файлов cookie доступна для устаревших сценариев, но не рекомендуется.
Вариант A. Использование маркера носителя с помощью заголовка HTTP (рекомендуется)
Вставьте маркер доступа непосредственно в Authorization заголовок исходного HTTP-запроса, используемого для загрузки веб-представления. Это самый безопасный и надежный метод.
Этот подход предпочтителен, так как он:
- Не сохраняет состояние: он не зависит от постоянных файлов cookie на стороне клиента.
- Изолирует маркер: он строго ограничивает маркер этим конкретным потоком запросов.
- Избегает векторов атак на основе веб-сайтов. Это позволяет обойти распространенные проблемы безопасности, связанные с сеансами, управляемыми браузером.
Чтобы загрузить веб-представление с проверкой подлинности на основе заголовков, выполняйте следующие действия.
- Создайте URL-адрес для веб-ресурса. Убедитесь, что он использует ПРОТОКОЛ HTTPS.
- Создайте объект пользовательского сетевого запроса.
- Добавьте заголовок
Authorization: Bearer <access_token>в запрос. - Загрузите запрос в компонент веб-представления (например,
WKWebViewв iOS илиWebViewAndroid).
Вариант B. Использование файлов cookie (только для резервного использования)
Если целевой веб-ресурс не может обрабатывать проверку подлинности на основе заголовков (например, некоторые устаревшие одностраничные приложения), можно внедрить маркер в виде файла cookie. Этот подход обычно не рекомендуется из-за рисков безопасности.
Внедрение файлов cookie в веб-представление доверяет состояние проверки подлинности механизму, управляемому браузером. Это делает сеанс "ambient" (автоматически присоединённым к запросам), что подвергает приложение стандартным классам веб-атак:
- XSS (межсайтовый скрипт) — сеанс уязвим для перехвата, если веб-содержимое скомпрометировано.
- CSRF (подделка запросов между сайтами): существует риск непреднамеренных подтвержденных запросов.
- Фиксация сеанса. Злоумышленник может управлять состоянием сеанса.
- Соответствие требованиям. Этот подход конфликтует с рекомендациями по обеспечению безопасности (например, MASTG-KNOW-0018) относительно сохранения конфиденциального состояния в jar-файлах cookie веб-представления.
Предупреждение
Подход на основе файлов cookie условно утвержден и обычно не рекомендуется. Используйте его только в том случае, если целевой веб-ресурс не может поддерживать проверку подлинности на основе заголовков.
Если вы используете подход на основе файлов cookie, эти требования применяются:
- Используйте файлы cookie сеанса, выдаваемые сервером, когда это возможно.
- Избегайте размещения необработанных маркеров доступа непосредственно в файлы cookie.
- Установите файлы cookie, используя
HttpOnly,Secureи соответствующиеSameSiteатрибуты. - Применение строгой защиты CSRF на стороне сервера.
Проверка подлинности и сохранение токена на стороне сервера
Когда запрос достигает веб-ресурса, сервер обрабатывает токен для установления сеанса.
Проверка токена
Веб-сервер перехватывает входящие запросы и проверяет подпись и утверждения токена. Для серверной части ASP.NET Core используйте Microsoft.Identity.Web (MISE) для автоматической обработки проверки.
Убедитесь, что утверждение аудитории (aud) токена совпадает с идентификатором веб-API, а утверждение издателя (iss) соответствует ожидаемому доверенному участнику.
Сохранение сеанса
Веб-представление не сохраняет пользовательские заголовки при последующих событиях навигации (например, когда пользователь выбирает ссылку). Чтобы сохранить состояние аутентификации после первоначального запроса, сервер выдает стандартный файл cookie сеанса (Set-Cookie) после успешной проверки изначального токена носителя.
Настройте файл cookie сеанса со следующими атрибутами:
HttpOnlySecure- Соответствующая
SameSiteполитика
Ограничения и требования к конфигурации
Чтобы убедиться, что маркер, выданный мобильному приложению, принимается веб-ресурсом, имейте в виду следующие конфигурации:
- Общее удостоверение клиента: мобильное приложение и веб-приложение должны совместно использовать один и тот же идентификатор клиента (идентификатор приложения). Если у них разные идентификаторы, бэкенд отклоняет токен мобильного приложения, поскольку аудитория не совпадает.
-
Выравнивание областей доступа: Мобильное приложение запрашивает токен доступа с точными правами доступа, необходимыми для веб-ресурса (например,
Profile.Read,Orders.Write).
Note
Это решение специально предназначено для сценария веб-представления. Более универсальное решение, которое расширяет возможности единого входа в системные браузеры и другие сложные сценарии, запланировано в будущих версиях.
Связанный контент
- Нативная аутентификация в Microsoft Entra External ID
- собственные веб-резервные проверки подлинности
- справочник по API собственной проверки подлинности