Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Предупреждение
Это содержимое предназначено для более старой конечной точки Azure AD версии 1.0. Используйте платформу удостоверений Майкрософт для новых проектов.
OpenID Connect — это простой уровень удостоверений, построенный на основе протокола OAuth 2.0. OAuth 2.0 определяет механизмы получения и использования маркеров доступа для доступа к защищенным ресурсам, но они не определяют стандартные методы для предоставления сведений об удостоверениях. OpenID Connect реализует проверку подлинности в качестве расширения для процесса авторизации OAuth 2.0. Он содержит сведения о конечном пользователе в виде id_token
, который подтверждает личность пользователя и предоставляет основную информацию профиля пользователя.
OpenID Connect — это наша рекомендация, если вы создаете веб-приложение, размещенное на сервере, и обращаетесь через браузер.
Регистрация приложения в клиенте AD
Сначала зарегистрируйте приложение в клиенте Azure Active Directory (Azure AD). Это даст вам идентификатор вашего приложения, а также позволяет ему получать токены.
Войдите на портал Azure.
Выберите арендатора Azure AD, выбрав свою учетную запись в правом верхнем углу страницы, затем перейдите к навигации "Переключить каталог" и выберите соответствующего арендатора.
- Пропустите этот шаг, если у вас есть только один клиент Azure AD в учетной записи или вы уже выбрали соответствующий клиент Azure AD.
На портале Azure найдите и выберите Azure Active Directory.
В левом меню Azure Active Directory выберите Регистрация приложений, а затем выберите Новая регистрация.
Следуйте инструкциям и создайте новое приложение. Для этого руководства не имеет значения, будет ли это веб-приложение или общедоступное клиентское приложение (мобильное или настольное &), но если вы хотите получить конкретные примеры для веб-приложений или общедоступных клиентских приложений, ознакомьтесь с нашими быстрыми стартами .
- Имя служит названием вашего приложения и описывает его конечным пользователям.
- В разделе Поддерживаемые типы учетных записей выберите Accounts in any organizational directory and personal Microsoft accounts (Учетные записи в любом каталоге организации и личные учетные записи Майкрософт).
- Укажите URI перенаправления. Для веб-приложений это базовый URL-адрес приложения, в котором пользователи могут войти. Например,
http://localhost:12345
. Для общедоступного клиента (мобильных и настольных) Azure AD использует его для возврата ответов с токенами. Введите значение, определенное для приложения. Например,http://MyFirstAADApp
.
После завершения регистрации Azure AD назначит приложению уникальный идентификатор клиента (идентификатор приложения ). Это значение необходимо в следующих разделах, поэтому скопируйте его на страницу приложения.
Чтобы найти приложение на портале Azure, выберите Регистрация приложений, а затем выберите Просмотр всех приложений.
Поток проверки подлинности при использовании OpenID Connect
Самый простой поток входа содержит следующие шаги. Каждый из них подробно описан ниже.
Документ метаданных OpenID Connect
OpenID Connect описывает документ метаданных, содержащий большую часть сведений, необходимых для выполнения входа в приложение. Сюда входят такие сведения, как ИСПОЛЬЗУЕМЫЕ URL-адреса и расположение открытых ключей подписывания службы. В документе метаданных OpenID Connect можно найти следующее:
https://login.microsoftonline.com/{tenant}/.well-known/openid-configuration
Метаданные — это простой документ нотации объектов JavaScript (JSON). Пример см. в следующем фрагменте кода. Содержимое фрагмента полностью описано в спецификации OpenID Connect. Обратите внимание, что предоставление идентификатора клиента вместо common
для {tenant} выше приведет к тому, что URI, специфичные для клиента, будут в возвращаемом объекте JSON.
{
"authorization_endpoint": "https://login.microsoftonline.com/{tenant}/oauth2/authorize",
"token_endpoint": "https://login.microsoftonline.com/{tenant}/oauth2/token",
"token_endpoint_auth_methods_supported":
[
"client_secret_post",
"private_key_jwt",
"client_secret_basic"
],
"jwks_uri": "https://login.microsoftonline.com/common/discovery/keys"
"userinfo_endpoint":"https://login.microsoftonline.com/{tenant}/openid/userinfo",
...
}
Если приложение содержит пользовательские ключи подписывания в результате использования функции сопоставления утверждений , необходимо добавить параметр запроса appid
, содержащий идентификатор приложения, чтобы получить jwks_uri
, содержащий сведения о ключе подписи приложения. Например, https://login.microsoftonline.com/{tenant}/.well-known/openid-configuration?appid=6731de76-14a6-49ae-97bc-6eba6914391e
содержит jwks_uri
из https://login.microsoftonline.com/{tenant}/discovery/keys?appid=6731de76-14a6-49ae-97bc-6eba6914391e
.
Отправьте запрос на вход
Когда веб-приложение должно пройти проверку подлинности пользователя, он должен направить пользователя в конечную точку /authorize
. Этот запрос аналогичен первому этапу потока кода авторизации OAuth 2.0 с несколькими важными различиями:
- Запрос должен содержать область
openid
в параметреscope
. - Параметр
response_type
должен содержатьid_token
. - Запрос должен содержать параметр
nonce
.
Таким образом, пример запроса будет выглядеть следующим образом:
// Line breaks for legibility only
GET https://login.microsoftonline.com/{tenant}/oauth2/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=id_token
&redirect_uri=http%3A%2F%2Flocalhost%3a12345
&response_mode=form_post
&scope=openid
&state=12345
&nonce=7362CAEA-9CA5-4B43-9BA3-34D7C303EBA7
Параметр | Тип | Описание |
---|---|---|
арендатор | Обязательно | Значение {tenant} в пути запроса можно использовать для того, чтобы контролировать, кто может входить в приложение. Допустимые значения — это идентификаторы клиента, например 8eaef023-2b34-4da1-9baa-8bc8c9d6a490 или contoso.onmicrosoft.com или common для маркеров, независимых от клиента. |
идентификатор клиента | Обязательно | Идентификатор приложения, назначенный приложению при регистрации в Azure AD. Это можно найти на портале Azure. Щелкните Azure Active Directory, щелкните Регистрации приложений, выберите приложение и найдите идентификатор приложения на странице приложения. |
тип_ответа | Обязательно | Необходимо включить id_token для входа OpenID Connect. Он также может включать другие response_types, например code или token . |
охват | рекомендуется | Спецификация OpenID Connect требует области openid , что соответствует разрешению «Вход» в пользовательском интерфейсе согласия. Эти и другие диапазоны OIDC игнорируются в конечной точке версии 1.0, но по-прежнему являются лучшей практикой для клиентов, соответствующих стандартам. |
nonce | Обязательно | Значение, включенное в запрос и созданное приложением, которое включено в результирующий id_token в качестве утверждения. Приложение может проверить это значение для предотвращения атак повторного использования токена. Обычно это значение является случайной, уникальной строкой или GUID, которую можно использовать для идентификации источника запроса. |
перенаправление_uri | рекомендуется | Redirect_uri вашего приложения, где ваше приложение может отправлять и получать ответы проверки подлинности. Он должен точно соответствовать одному из redirect_uris, зарегистрированных на портале, но при этом должен быть закодирован в формате URL. При отсутствии пользовательского агента он будет случайным образом отправлен обратно на один из URI перенаправления, зарегистрированных для приложения. Максимальная длина — 255 байт |
режим_ответа | необязательно | Указывает метод, который следует использовать для отправки результирующего authorization_code обратно в приложение. Поддерживаемые значения form_post для HTTP формы публикации и fragment для фрагмента URL. Для веб-приложений рекомендуется использовать response_mode=form_post , чтобы обеспечить наиболее безопасную передачу маркеров в приложение. Значение по умолчанию для любого потока, включая id_token, равно fragment . |
государство | рекомендуется | Значение, включенное в запрос, возвращаемое в ответе токена. Это может быть строка любого контента, который вы пожелаете. Как правило, для предотвращения подделки межсайтовых запросовиспользуется генерируемое случайным образом уникальное значение. Состояние также используется для кодирования сведений о состоянии пользователя в приложении до того, как произошел запрос на аутентификацию, например, страницу или представление, на котором они находились. |
запрос | необязательно | Указывает требуемый тип взаимодействия с пользователем. В настоящее время единственными допустимыми значениями являются login, none и "consent".
prompt=login заставляет пользователя вводить свои учетные данные в этом запросе, отрицая единый вход.
prompt=none является противоположностью — это гарантирует, что пользователь не получит ни одного интерактивного запроса. Если запрос не может быть выполнен бесшумно с помощью единого входа, конечная точка возвращает ошибку.
prompt=consent запускает диалоговое окно согласия OAuth после входа пользователя, запрашивая у пользователя предоставление разрешений приложению. |
подсказка_для_входа | необязательно | Можно использовать для предварительной заполнения поля имени пользователя или электронной почты страницы входа для пользователя, если вы знаете свое имя пользователя заранее. Часто приложения используют этот параметр во время повторной проверки подлинности, уже извлекая имя пользователя из предыдущего входа с помощью утверждения preferred_username . |
На текущем этапе пользователю предлагается ввести учетные данные и завершить аутентификацию.
Пример ответа
Пример ответа, отправленный в redirect_uri
, указанный в запросе на вход после проверки подлинности пользователя, может выглядеть следующим образом:
POST / HTTP/1.1
Host: localhost:12345
Content-Type: application/x-www-form-urlencoded
id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNB...&state=12345
Параметр | Описание |
---|---|
ид_токен | Маркер id_token , запрошенный приложением. Вы можете использовать id_token для проверки удостоверения пользователя и начала сеанса с пользователем. |
государство | Значение, включенное в запрос, которое также возвращается в ответе токена. Как правило, для предотвращения подделки межсайтовых запросовиспользуется генерируемое случайным образом уникальное значение. Состояние также используется для кодирования сведений о состоянии пользователя в приложении до того, как произошел запрос на аутентификацию, например, страницу или представление, на котором они находились. |
Ответ на ошибку
Сообщения об ошибках также можно отправлять на redirect_uri
, чтобы приложение обрабатывало их должным образом:
POST / HTTP/1.1
Host: localhost:12345
Content-Type: application/x-www-form-urlencoded
error=access_denied&error_description=the+user+canceled+the+authentication
Параметр | Описание |
---|---|
ошибка | Строка кода ошибки, которая может использоваться для классификации типов возникающих ошибок и может использоваться для реагирования на ошибки. |
описание ошибки | Конкретное сообщение об ошибке, с помощью которого разработчик может определить причину возникновения ошибки проверки подлинности. |
Коды ошибок на конечной точке авторизации
В следующей таблице описаны различные коды ошибок, которые могут возвращаться в параметре ответа с ошибкой error
.
Код ошибки | Описание | Действие клиента |
---|---|---|
недействительный_запрос | Ошибка протокола, например отсутствует обязательный параметр. | Исправьте запрос и отправьте его повторно. Это ошибка разработки, и она обычно обнаруживается во время первоначального тестирования. |
неавторизованный клиент | Клиентское приложение не может запрашивать код авторизации. | Обычно это происходит, когда клиентское приложение не зарегистрировано в Azure AD или не добавляется в клиент Azure AD пользователя. Приложение может предложить пользователю инструкцию по установке приложения и его добавлению в Azure AD. |
Доступ запрещен | Владелец ресурса отказал в согласии | Клиентское приложение может уведомить пользователя о том, что оно не может продолжить, если пользователь не предоставит согласие. |
неподдерживаемый_тип_ответа | Сервер авторизации не поддерживает тип ответа в запросе. | Исправьте запрос и отправьте его повторно. Это ошибка разработки, и она обычно обнаруживается во время первоначального тестирования. |
ошибка сервера | Сервер обнаружил непредвиденную ошибку. | Повторите запрос. Эти ошибки могут возникать в связи с временными условиями. Клиентское приложение может объяснить пользователю, что его ответ отложен из-за временной ошибки. |
временно недоступно | Сервер временно занят и не может обработать запрос. | Повторите запрос. Клиентское приложение может объяснить пользователю, что его ответ задерживается из-за временного условия. |
неверный_ресурс | Целевой ресурс недопустим, так как он не существует, Azure AD не может найти его или неправильно настроен. | Это означает, что ресурс, если он существует, не настроен в клиенте. Приложение может предложить пользователю инструкцию по установке приложения и его добавлению в Azure AD. |
Подтвердите id_token
Просто получение id_token
недостаточно для аутентификации пользователя; необходимо проверить подпись и удостовериться в утверждениях в id_token
в соответствии с требованиями вашего приложения. Конечная точка Azure AD использует веб-маркеры JSON (JWTs) и криптографию открытого ключа для подписывания маркеров и проверки их допустимости.
Вы можете проверить id_token
в клиентском коде, но распространенная практика заключается в отправке id_token
на внутренний сервер и выполнить проверку там.
Вы также можете проверить дополнительные утверждения в зависимости от вашего сценария. Ниже приведены некоторые распространенные проверки:
- Обеспечение регистрации пользователя или организации для приложения.
- Обеспечение надлежащей авторизации и привилегий пользователя с помощью заявок
wids
илиroles
. - Обеспечение определенного уровня надежности аутентификации, например многофакторной аутентификации.
После проверки id_token
можно начать сеанс с пользователем и использовать утверждения в id_token
для получения сведений о пользователе в приложении. Эти сведения можно использовать для отображения, ведения записей, персонализации и т. д. Дополнительные сведения о id_tokens
и требованиях см. в AAD id_tokens.
Отправка запроса на выход
Если вы хотите выйти из приложения, недостаточно очистить файлы cookie вашего приложения или завершить сеанс с пользователем. Вы также должны перенаправить пользователя на end_session_endpoint
для выхода. Если это не удалось сделать, пользователь сможет повторно выполнить проверку подлинности в приложении без ввода учетных данных, так как у него будет действительный сеанс единого входа с конечной точкой Azure AD.
Вы можете просто перенаправить пользователя на end_session_endpoint
, перечисленного в документе метаданных OpenID Connect.
GET https://login.microsoftonline.com/common/oauth2/logout?
post_logout_redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
Параметр | Тип | Описание |
---|---|---|
post_logout_redirect_uri | рекомендуется | URL-адрес, на который пользователь должен быть перенаправлен после успешного выхода. Этот URL-адрес должен соответствовать одному из URI перенаправления, зарегистрированных для приложения на портале регистрации приложений. Если post_logout_redirect_uri не включен, пользователю отображается универсальное сообщение. |
Единый выход из системы
При перенаправлении пользователя в end_session_endpoint
Azure AD очищает сеанс пользователя из браузера. Однако пользователь может войти в другие приложения, использующие Azure AD для проверки подлинности. Чтобы эти приложения могли одновременно вывести пользователя из системы, Azure AD отправляет HTTP-запрос GET на LogoutUrl
зарегистрированных всех приложений, в которые в настоящий момент вошёл пользователь. Приложения должны реагировать на этот запрос, очищая любой сеанс, который идентифицирует пользователя и возвращает ответ 200
. Если вы хотите поддерживать функцию единого выхода в приложении, необходимо реализовать соответствующий LogoutUrl
в коде вашего приложения. Вы можете задать LogoutUrl
на портале Azure:
- Войдите на портал Azure.
- Выберите Active Directory, щелкнув свою учетную запись в правом верхнем углу страницы.
- На панели навигации слева выберите Azure Active Directory, а затем выберите регистрации приложений и выберите приложение.
- Щелкните параметры, затем Свойства и найдите текстовое поле URL-адрес выхода.
Получение токена
Многие веб-приложения должны не только авторизовать пользователя, но и получить доступ к веб-службе от его имени с использованием OAuth. Этот сценарий сочетает использование OpenID Connect для аутентификации пользователей и одновременное получение authorization_code
, который можно использовать для получения access_tokens
с помощью потока авторизации OAuth .
Получите токены доступа
Чтобы получить токены доступа, необходимо изменить вышеописанный запрос на вход.
// Line breaks for legibility only
GET https://login.microsoftonline.com/{tenant}/oauth2/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e // Your registered Application ID
&response_type=id_token+code
&redirect_uri=http%3A%2F%2Flocalhost%3a12345 // Your registered Redirect Uri, url encoded
&response_mode=form_post // `form_post' or 'fragment'
&scope=openid
&resource=https%3A%2F%2Fservice.contoso.com%2F // The identifier of the protected resource (web API) that your application needs access to
&state=12345 // Any value, provided by your app
&nonce=678910 // Any value, provided by your app
Включив в запрос области разрешений и используя response_type=code+id_token
, конечная точка authorize
гарантирует, что пользователь дал согласие на разрешения, указанные в параметре запроса scope
, и возвращает код авторизации приложения для обмена маркером доступа.
Успешный ответ
Успешный ответ, отправленный в redirect_uri
с помощью response_mode=form_post
, выглядит следующим образом:
POST /myapp/ HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNB...&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...&state=12345
Параметр | Описание |
---|---|
ид_токен | Маркер id_token , запрошенный приложением. Вы можете использовать id_token для проверки удостоверения пользователя и начала сеанса с пользователем. |
код | Запрашиваемый приложением код авторизации. Приложение может использовать код авторизации для целевого ресурса, чтобы запросить токен доступа. Authorization_codes кратковременны и обычно истекают через 10 минут. |
государство | Если параметр состояния включен в запрос, то в ответе должно появиться то же значение. Приложение должно убедиться, что значения параметра state в запросе и отклике идентичны. |
Ответ на ошибку
Сообщения об ошибках также можно отправлять на redirect_uri
, чтобы приложение обрабатывало их должным образом:
POST /myapp/ HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
error=access_denied&error_description=the+user+canceled+the+authentication
Параметр | Описание |
---|---|
ошибка | Строка кода ошибки, которая может использоваться для классификации типов возникающих ошибок и может использоваться для реагирования на ошибки. |
описание ошибки | Конкретное сообщение об ошибке, с помощью которого разработчик может определить причину возникновения ошибки проверки подлинности. |
Для описания возможных кодов ошибок и их рекомендуемых действий клиента см. в разделе "Коды ошибок конечной точки авторизации".
Получив code
и id_token
авторизации, вы можете войти в систему и получить токены доступа от их имени. Чтобы авторизовать пользователя, необходимо проверить id_token
точно так же, как описано выше. Чтобы получить маркеры доступа, можно выполнить действия, описанные в разделе "Использование кода авторизации для запроса маркера доступа" нашей документации по потоку кода OAuth .
Дальнейшие действия
- Дополнительные сведения о маркерах доступа .
- Получите дополнительные сведения о ,
id_token
и.