Структура и ограничения URI перенаправления (URL-адрес ответа)
Чтобы аутентифицировать пользователя, ваше приложение должно отправить запрос на вход в конечную точку авторизации Microsoft Entra, указав URI перенаправления в качестве параметра. URI перенаправления — это важная функция безопасности, которая гарантирует, что сервер проверки подлинности Microsoft Entra отправляет коды авторизации и маркеры доступа целевому получателю. В этой статье описываются функции и ограничения URI перенаправления в платформе идентификации Microsoft.
Что такое URI перенаправления?
URI перенаправления или URL-адрес ответа — это место, куда сервер проверки подлинности Microsoft Entra отправляет пользователя после успешной авторизации и выдачи токена доступа. Чтобы выполнить вход в систему для пользователя, ваше приложение должно отправить запрос на вход с URI перенаправления, указанным в качестве параметра, чтобы после успешной аутентификации сервер перенаправил пользователя и выдал токен доступа на указанный в запросе URI перенаправления.
Например, в рабочем веб-приложении унифицированный указатель ресурса (URI) перенаправления часто является общедоступной конечной точкой, где запущено ваше приложение, например https://contoso.com/auth-response
. Во время разработки обычно добавляется конечная точка доступа, где запускается ваше приложение локально, например https://127.0.0.1/auth-response
или http://localhost/auth-response
. Убедитесь, что любые ненужные среды разработки или URI перенаправления не раскрываются в рабочем приложении. Это можно сделать с помощью отдельных регистраций приложений для разработки и производственной среды.
Почему необходимо добавить URI перенаправления в регистрацию приложения?
По соображениям безопасности сервер аутентификации не будет перенаправлять пользователей или отправлять токены на URL, который не был добавлен в регистрацию приложения. Серверы входа Microsoft Entra перенаправляют только пользователей и отправляют маркеры для перенаправления URI, добавленных в регистрацию приложения. Если URI перенаправления, указанный в запросе для входа, не соответствует ни одному из URI перенаправления, добавленных в приложении, вы получите сообщение об ошибке, например AADSTS50011: The reply URL specified in the request does not match the reply URLs configured for the application
.
Дополнительные сведения о кодах ошибок см. в разделе коды ошибок проверки подлинности и авторизации Microsoft Entra.
Следует ли добавить URI перенаправления в регистрацию приложения?
Следует ли добавить URI перенаправления в регистрацию приложения, зависит от протокола авторизации, используемого приложением. Необходимо добавить соответствующие URI перенаправления в регистрацию приложения, если приложение использует следующие протоколы авторизации:
- Поток кода авторизации OAuth 2.0
- Поток учетных данных клиента OAuth 2.0
- Неявный поток предоставления OAuth 2.0
- OpenID Connect
- Протокол единого входа SAML
Вам не нужно добавлять URI перенаправления в регистрацию приложения, если приложение использует следующие протоколы авторизации или функции.
- Собственная проверка подлинности
- Поток кода устройства OAuth 2.0
- Поток OAuth 2.0 от имени
- Поток учетных данных владельца ресурса OAuth 2.0
- Поток интегрированной проверки подлинности Windows
- Провайдер удостоверений SAML 2.0 для единого входа
В какую платформу следует добавить URI перенаправления?
Если приложение, которое вы создаете, содержит один или несколько URI перенаправления в регистрации приложения, необходимо включить конфигурацию общедоступного потока клиента. В следующих таблицах приведены рекомендации по тому, какой тип URI перенаправления следует или не следует добавлять в зависимости от платформы, на которой вы строите своё приложение.
Настройка URI перенаправления веб-приложения
Тип приложения | Типичные языки и платформы | Платформа для добавления URI перенаправления в регистрацию приложения |
---|---|---|
Традиционное веб-приложение, в котором большая часть логики приложения выполняется на сервере | Node.js, Веб, ASP.NET, Python, Java, ASP.NET Core, PHP, Ruby, Blazor Server | Интернет |
Одностраничное приложение, в котором большая часть логики пользовательского интерфейса выполняется в веб-браузере, взаимодействующем с веб-сервером, в основном с помощью веб-API | JavaScript, Angular, React, Blazor WebAssembly, Vue.js | Одностраничное приложение (SPA) |
Конфигурация URI перенаправления мобильных и настольных приложений
Тип приложения | Типичные языки и платформы | Платформа для добавления URI перенаправления в регистрации приложений |
---|---|---|
Приложение iOS или macOS, за исключением сценариев, перечисленных ниже этой таблицы | Swift, Objective-C, Xamarin | IOS/macOS |
Приложение Android | Java, Kotlin, Xamarin | Android |
Приложение, работающее на мобильном устройстве или настольном компьютере | Node.js electron, Windows desktop, UWP, React Native, Xamarin, Android, iOS/macOS | Мобильные и настольные приложения |
Если вы создаете приложение iOS с помощью одного из следующих методов, используйте платформу мобильных и классических приложений для добавления URI перенаправления:
- Приложения iOS с использованием устаревших пакетов SDK (ADAL)
- Приложения iOS, использующие открытые SDK (AppAuth)
- Приложения iOS с использованием кроссплатформенной технологии мы не поддерживаем (Flutter)
- Приложения iOS, реализующие наши протоколы OAuth напрямую
- приложения macOS с использованием кроссплатформенной технологии мы не поддерживаем (Electron)
Приложения, для которых не требуется URI перенаправления
Тип приложения | Примеры и примечания | Связанный поток OAuth |
---|---|---|
Приложения, работающие на устройствах без клавиатуры | Приложения, работающие на смарт-телевизоре, устройстве Интернета вещей или принтере | Дополнительные сведения об потоке кода устройства |
Приложения, обрабатывающие пароли пользователей напрямую, вместо перенаправления пользователей на размещенный веб-сайт входа в Entra и позволяя Entra обрабатывать пароль пользователя безопасным образом. | Этот поток следует использовать только в том случае, если другие более безопасные потоки, такие как поток кода авторизации, не являются жизнеспособными, так как это не так безопасно. | Поток с использованием аутентификации по паролю владельца ресурса учить больше |
Настольные или мобильные приложения, работающие в Windows или на компьютере, подключенном к домену Windows (AD или Azure AD), с использованием интегрированной аутентификации Windows вместо менеджера веб-аккаунтов. | Настольное или мобильное приложение, которое должно автоматически входить в систему после того, как пользователь вошел в Windows PC с учетными данными Entra. | Дополнительные сведения об интегрированной аутентификации Windows узнать больше |
Каковы ограничения URI перенаправления для приложений Microsoft Entra?
Модель приложения Microsoft Entra указывает следующие ограничения для перенаправления URI:
URI перенаправления должны начинаться со схемы
https
, за исключением некоторых случаев перенаправления на localhost.URI перенаправления чувствительны к регистру и должны соответствовать регистру URL-пути выполняемого приложения.
Примеры:
- Если приложение включает в свой путь
.../abc/response-oidc
, не указывайте.../ABC/response-oidc
в URI перенаправления. Так как веб-браузер обрабатывает пути с учетом регистра, файлы cookie, связанные с.../abc/response-oidc
, могут быть исключены при перенаправлении на не совпадающий по регистру знаков URL-адрес.../ABC/response-oidc
.
- Если приложение включает в свой путь
URI перенаправления, которые не настроены с сегментом пути, возвращаются с завершающим слешем (
/
) в ответе. Это применимо только в том случае, если режим ответа имеет значениеquery
илиfragment
.Примеры:
-
https://contoso.com
возвращается в видеhttps://contoso.com/
-
http://localhost:7071
возвращается в видеhttp://localhost:7071/
-
К URI перенаправления, содержащих сегмент пути, не добавляется замыкающая косая черта в ответе.
Примеры:
-
https://contoso.com/abc
возвращается в видеhttps://contoso.com/abc
-
https://contoso.com/abc/response-oidc
возвращается в видеhttps://contoso.com/abc/response-oidc
-
URI перенаправления не поддерживают специальные символы.
! $ ' ( ) , ;
URI перенаправления не поддерживают домены с международными именами.
Максимальное количество URI перенаправления и максимальная длина URI
Максимальное количество URI перенаправления невозможно увеличить по соображениям безопасности. Если в вашем сценарии требуется больше URI перенаправления, чем максимально допустимо, рассмотрите следующую схему с параметром состояния в качестве решения. В следующей таблице показано максимальное количество адресов перенаправления, которые можно добавить при регистрации приложения на платформе удостоверений Microsoft.
Учетные записи для входа | Максимальное число URI переадресации | Описание |
---|---|---|
Рабочие или учебные учетные записи Майкрософт в клиенте Microsoft Entra любой организации | 256 | Для поля signInAudience в манифесте приложения установлено AzureADMyOrg или AzureADMultipleOrgs |
Личные учетные записи Майкрософт и рабочие и учебные учетные записи | 100 | В манифесте приложения для поля signInAudience установлено значение AzureADandPersonalMicrosoftAccount |
Длина каждого URI перенаправления, добавляемого для зарегистрированного приложения, должна составлять не более 256 символов.
Перенаправление URI в объектах приложений и учетных записях служб
- Всегда добавляйте URI перенаправления только в объект приложения.
- Никогда не добавляйте значения URI перенаправления в субъект-службу, так как эти значения можно удалить при синхронизации объекта субъекта-службы с объектом приложения. Это может произойти из-за любой операции обновления, которая активирует синхронизацию между двумя объектами.
Поддержка параметров запроса в URI перенаправления
Параметры запроса разрешены в URI перенаправления для приложений, которые выполняют вход пользователей только с помощью рабочих или учебных учетных записей.
Параметры запроса не допускаются в URI перенаправления для регистрации приложений, настроенных для входа пользователей с личными учетными записями Майкрософт, такими как Outlook.com (Hotmail), Messenger, OneDrive, MSN, Xbox Live или Microsoft 365.
Аудитория входа в систему регистрации приложений | Поддерживает параметры запроса в URI перенаправления |
---|---|
Учетные записи только в этом организационном каталоге (только Contoso — единственный арендатор) | ![]() |
Учетные записи в любом каталоге организации (любой каталог Microsoft Entra — с несколькими клиентами) | ![]() |
Учетные записи в любом каталоге организации (любой каталог Microsoft Entra — Multitenant) и личные учетные записи Майкрософт (например, Skype и Xbox) | ![]() |
Только личные учетные записи Майкрософт | ![]() |
Поддерживаемые схемы
HTTPS: схема HTTPS (https://
) поддерживается для всех URI перенаправления на базе протокола HTTP.
HTTP: схема HTTP (http://
) поддерживается только для URI перенаправления localhost и используется исключительно на этапах локальной разработки и тестирования приложения.
Пример URI перенаправления | Срок действия |
---|---|
https://contoso.com |
Действительный |
https://contoso.com/abc/response-oidc |
Действительный |
https://localhost |
Действительный |
http://contoso.com/abc/response-oidc |
Недопустимо |
http://localhost |
Действительный |
http://localhost/abc |
Действительный |
Исключения для localhost
В соответствии с RFC 8252 разделами 8.3 и 7.3, для URI перенаправления типа "loopback" или "localhost" действуют два особых правила:
- Схемы URI
http
допустимы, поскольку перенаправление никогда не покидает устройство. Таким образом, оба этих URI допустимы:http://localhost/myApp
https://localhost/myApp
- Из-за временного характера диапазонов портов, часто используемых собственными приложениями, компонент порта (например,
:5001
или:443
) при сопоставлении URI перенаправления игнорируется. В результате все эти URI считаются эквивалентными:http://localhost/MyApp
http://localhost:1234/MyApp
http://localhost:5000/MyApp
http://localhost:8080/MyApp
С точки зрения разработки это означает несколько моментов:
Не регистрируйте несколько URI перенаправления, если в них различается только порт. Сервер входа выбирает один URI произвольно и использует поведение, связанное с этим URI перенаправления (например, является ли это перенаправлением типа
web
-,native
- илиspa
-).Это особенно важно, если вы планируете использовать в одном зарегистрированном приложении разные потоки проверки подлинности (например, и выдачу кода авторизации, и неявный поток). Чтобы связать правильное поведение ответа с каждым URI перенаправления, сервер входа должен иметь возможность различать URI перенаправления и не может этого сделать, если различие только в порте.
Чтобы зарегистрировать несколько URI перенаправления на localhost для тестирования различных потоков в процессе разработки, различайте их, используя компонент пути в URI. Например,
http://localhost/MyWebApp
не эквивалентноhttp://localhost/MyNativeApp
.В настоящее время адрес
[::1]
обратного цикла IPv6 не поддерживается.
Выбор 127.0.0.1 вместо localhost
Чтобы предотвратить сбой приложения из-за неправильно настроенных брандмауэров или переименованных сетевых интерфейсов, используйте IP-литеральный адрес обратного цикла вместо localhost
в URI перенаправления. Например, https://127.0.0.1
.
Однако нельзя использовать поле перенаправления URI в портале Azure для добавления URI перенаправления на основе цикла, использующего схему http
:
Чтобы добавить URI перенаправления, использующий схему http
с адресом обратной связи 127.0.0.1
, в настоящее время необходимо изменить атрибут replyUrlsWithType в манифесте приложения.
Ограничения на подстановочные символы в URI перенаправления
URI с подстановочными знаками, такие как https://*.contoso.com
, кажутся удобными, но их следует избегать из-за проблем с безопасностью. Согласно спецификации OAuth 2.0 (раздел 3.1.2 RFC 6749), URI конечной точки перенаправления должен быть абсолютным. Таким образом, если настроенный URI подстановочного знака соответствует URI перенаправления, строки запроса и фрагменты в URI перенаправления удаляются.
URI с подстановочными знаками в настоящее время не поддерживаются для зарегистрированных приложений, настроенных для входа как в личные, так и в рабочие и учебные учетные записи Майкрософт. URI подстановочных знаков разрешены, однако для приложений, настроенных для входа только в рабочие или учебные учетные записи в клиенте Microsoft Entra организации.
Чтобы добавить URI перенаправления с подстановочными знаками для зарегистрированных приложений, которые входят в рабочие или учебные учетные записи, используйте редактор манифеста приложения в разделе Регистрация приложений на портале Azure. Хотя с помощью редактора манифеста действительно можно задать URI перенаправления с подстановочными знаками, мы настоятельно рекомендуем придерживаться требований раздела 3.1.2 RFC 6749 и использовать только абсолютные URI.
Если вашему сценарию требуется больше URI перенаправления, чем максимально разрешено, вместо добавления подстановочного URI перенаправления используйте следующий подход с параметром состояния.
Использование параметра состояния
Если у вас есть несколько поддоменов и вам необходимо после успешной проверки подлинности перенаправлять пользователей на ту же страницу, с которой они начали, можно использовать параметр состояния.
Если вы используете этот подход:
- Создайте "общий" URI перенаправления для каждого приложения, чтобы обрабатывать маркеры безопасности, полученные от конечной точки авторизации.
- Приложение может отсылать параметры, зависящие от приложения (например, URL-адрес поддомена, откуда перешел пользователь, или настройки фирменного оформления), в параметр состояния. При использовании параметра состояния учитывайте защиту против CSRF, как указано в разделе 10.12 RFC 6749.
- Параметры, относящиеся к приложению, включают все сведения, необходимые для отображения правильного интерфейса для пользователя, то есть создания соответствующего состояния приложения. Конечная точка авторизации Microsoft Entra удаляет HTML из параметра состояния, поэтому убедитесь, что вы не передаете HTML содержимое в этом параметре.
- Когда Microsoft Entra ID отправляет ответ на URI перенаправления "shared", он отправляет параметр состояния обратно в приложение.
- Затем приложение может использовать значение в параметре состояния, чтобы определить URL-адрес для отправки пользователю. Убедитесь, что вы проверили защиту CSRF.
Предупреждение
Такой подход позволяет скомпрометированному клиенту изменять дополнительные параметры, отправляемые в параметре состояния, поэтому пользователь перенаправляется на другой URL-адрес, что является угрозой открытого перенаправления, как описано в стандарте RFC 6819. Таким образом, клиент должен защищать эти параметры, шифруя состояние или проверяя его с помощью других средств, таких как сопоставление доменного имени в URI перенаправления с маркером.
Следующие шаги
Узнайте о манифесте регистрации приложения.