Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к службам федерации Active Directory (AD FS) 2019 и более поздних версий
Scenario | Пошаговое руководство по сценарию с примерами | Поток или сценарий предоставления OAuth 2.0 | Тип клиента |
---|---|---|---|
Одностраничное приложение | Пример использования MSAL | Implicit | Public |
Веб-приложение, которое поддерживает вход пользователей | Код авторизации | Общедоступный, конфиденциальный | |
Нативное приложение вызывает веб-API | Пример использования MSAL | Код авторизации | Public |
Веб-приложение вызывает веб-API | Пример использования MSAL | Код авторизации | Confidential |
Реализация PKCE | Код авторизации | Public | |
Один веб-API вызывает другой веб-API от имени пользователя | Пример использования MSAL | On-behalf-of | Веб-приложение работает как конфиденциальное. |
Демон вызывает веб-API. | Учетные данные клиента | Confidential | |
Веб-приложение вызывает веб-API с помощью учетных данных пользователя | Учетные данные владельца ресурса с паролем | Общедоступный, конфиденциальный | |
Приложение без браузера вызывает веб-API | Код устройства | Общедоступный, конфиденциальный |
Поток неявного предоставления
Note
Корпорация Майкрософт настоятельно рекомендует переход на идентификатор Microsoft Entra, а не обновление до более новой версии AD FS. Для получения дополнительной информации о неявном потоке предоставления в Microsoft Entra ID см. Неявный поток предоставления в платформе идентификации Microsoft.
Для одностраничных приложений (AngularJS, Ember.js, React.jsи т. д.), AD FS поддерживает неявный поток предоставления OAuth 2.0. Неявный поток описан в спецификации OAuth 2.0. Основное его преимущество заключается в том, что приложения могут получать маркеры от AD FS без обмена учетными данными с внутренним сервером. Этот поток позволяет приложению входить в систему пользователя, поддерживать сеанс и получать токены к другим веб-API в клиентском JavaScript-коде. При использовании неявного потока, в частности, вокруг клиента следует учитывать несколько важных соображений безопасности.
Если вы хотите использовать неявный поток и AD FS для добавления проверки подлинности в приложение JavaScript, выполните общие действия, описанные в следующем разделе.
Схема протокола
На следующей схеме показано, как выглядит весь процесс неявной аутентификации. Разделы, представленные далее, описывают каждый шаг более подробно.
Запрос ID токена и токена для доступа
Для первоначального входа пользователя в приложение можно отправить запрос проверки подлинности OpenID Connect и получить id_token и маркер доступа из конечной точки AD FS.
// Line breaks for legibility only
https://adfs.contoso.com/adfs/oauth2/authorize?
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&response_type=id_token+token
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&scope=openid
&response_mode=fragment
&state=12345
Parameter | Required/optional | Description |
---|---|---|
client_id | required | Идентификатор приложения (клиента), назначенный вашему приложению службой AD FS. |
response_type | required | Должен включать id_token для входа в OpenID Connect. Он также может включать response_type token . Здесь token позволяет вашему приложению получать токен доступа непосредственно из авторизационной конечной точки, не выполняя второй запрос к конечной точке токена. |
redirect_uri | required | URI перенаправления вашего приложения, куда могут быть отправлены и приняты ответы аутентификации вашим приложением. Он должен точно соответствовать одному из URI перенаправления, настроенных в AD FS. |
nonce | required | Значение, которое включается в запрос и создается приложением, должно быть помещено в результирующий "id_token" как претензия. Приложение может проверить это значение, чтобы предотвратить атаки с использованием воспроизведения токена. Значение обычно является случайной уникальной строкой, которую можно использовать для идентификации источника запроса. Требуется только при запросе id_token. |
scope | optional | Список областей, разделённых пробелами. Для OpenID Connect необходимо указать массив данных openid . |
resource | optional | URL-адрес веб-API. Примечание. Если используется клиентская библиотека MSAL, параметр ресурса не отправляется. Вместо этого URL-адрес ресурса отправляется как часть параметра области: scope = [resource url]//[scope values, for example, openid] если ресурс не передается здесь или в области, AD FS использует url-адрес ресурса по умолчанию urn:microsoft:userinfo. Невозможно настроить политики ресурса userinfo, такие как MFA, политика выпуска или авторизации. |
response_mode | optional | Указывает метод, с помощью которого результирующий маркер будет отправлен приложению. По умолчанию — fragment . |
state | optional | Значение, включенное в запрос, должно быть возвращено также в ответе токена. Это может быть строка любого нужного содержимого. Как правило, для предотвращения подделки межсайтовых запросовиспользуется генерируемое случайным образом уникальное значение. Параметр "state" также используется для кодирования информации о состоянии пользователя в приложении перед созданием запроса на проверку подлинности, например информации об открытой на тот момент странице или представлении. |
prompt | optional | Указывает тип необходимого взаимодействия с пользователем. Единственными допустимыми значениями в настоящее время являются вход и нет. - prompt=login заставляет пользователя вводить свои учетные данные в этом запросе, отрицая единый вход.
- prompt=none противоположность — это гарантирует, что пользователю не будет представлено интерактивное приглашение. Если запрос не может быть выполнен без участия пользователя с помощью единого входа, AD FS возвращает ошибку interaction_required. |
login_hint | optional | Можно применять для предварительного заполнения поля имени пользователя или адреса электронной почты на странице входа пользователя (если имя пользователя известно заранее). Часто приложения используют этот параметр во время повторной проверки подлинности, уже извлекая имя пользователя из предыдущей авторизации, используя upn утверждение из id_token . |
domain_hint | optional | Если это значение включено, процесс обнаружения на основе домена, который пользователь проходит на странице входа, пропускается, что приводит к немного более комфортному пользовательскому опыту. |
На текущем этапе пользователю предлагается ввести учетные данные и завершить аутентификацию. После проверки подлинности пользователя конечная точка авторизации AD FS возвращает ответ на redirect_uri, указанное приложением, используя метод, указанный в параметре response_mode.
Успешный ответ
Успешный ответ при response_mode=fragment and response_type=id_token+token
использовании выглядит следующим образом:
// Line breaks for legibility only
GET https://localhost/myapp/#
access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZEstZnl0aEV...
&token_type=Bearer
&expires_in=3599
&scope=openid
&id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZstZnl0aEV1Q...
&state=12345
Parameter | Description |
---|---|
access_token | Включен, если response_type включает token . |
token_type | Включен, если response_type включает token . Всегда Bearer . |
expires_in | Включен, если response_type включает token . Указывает количество секунд, в течение которых маркер остается допустимым (для кэширования). |
scope | Указывает области, для которых действителен токен доступа. |
id_token | Включен, если response_type включает id_token . Подписанный токен JSON Web (JWT). Приложение может расшифровать сегменты этого маркера, чтобы запросить сведения о выполнившем вход пользователе. Эти значения можно кэшировать и (или) отображать в приложении, но их не следует использовать в любых процессах авторизации или обеспечения безопасности. |
state | Если запрос содержит параметр "state", в ответе должно отображаться то же значение. Приложение должно убедиться, что значения параметра state в запросе и отклике идентичны. |
Маркеры обновления
Неявное разрешение не предоставляет токены обновления. Срок действия id_tokens и access_tokens истекает через короткий период времени, поэтому приложение должно периодически обновлять эти маркеры. Чтобы обновить любой тип токена, можно выполнить тот же скрытый запрос через iframe, что и в предыдущем разделе, используя параметр prompt=none
для управления поведением платформы идентификаций. Если вы хотите получить новый id_token
, обязательно используйте response_type=id_token
.
Поток предоставления кода авторизации
Note
Корпорация Майкрософт настоятельно рекомендует переход на идентификатор Microsoft Entra, а не обновление до более новой версии AD FS. Для получения дополнительной информации о потоке предоставления кода авторизации в Microsoft Entra ID, см. Поток предоставления кода авторизации в платформе идентификации Microsoft.
Вы можете использовать код авторизации OAuth 2.0 в веб-приложениях для получения доступа к защищенным ресурсам, таким как веб-API. Описание потока кода авторизации OAuth 2.0 см. в разделе 4.1 спецификации OAuth 2.0. Он используется для выполнения проверки подлинности и авторизации в большинстве типов приложений, включая веб-приложения и собственные установленные приложения. Поток позволяет приложениям безопасно получать access_tokens, которые можно использовать для доступа к ресурсам, которым доверяет AD FS.
Схема протокола
На обобщенном уровне поток проверки подлинности для нативного приложения выглядит примерно так:
Запрос кода авторизации
Поток кода авторизации начинается с клиента, направляющего пользователя в конечную точку /authorization. В этом запросе клиент указывает разрешения, которые ему требуется получить от пользователя:
// Line breaks for legibility only
https://adfs.contoso.com/adfs/oauth2/authorize?
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&response_mode=query
&resource=https://webapi.com/
&scope=openid
&state=12345
Parameter | Required/optional | Description |
---|---|---|
client_id | required | Идентификатор приложения (клиента), который был назначен вашему приложению в AD FS. |
response_type | required | Должен включать код для потока кода авторизации. |
redirect_uri | required | Место redirect_uri вашего приложения, где оно может отправлять и получать ответы аутентификации. Он должен точно соответствовать одному из redirect_uris, зарегистрированных в AD FS для клиента. |
resource | optional | URL-адрес веб-API. Примечание. Если используется клиентская библиотека MSAL, параметр ресурса не отправляется. Вместо этого URL-адрес ресурса отправляется как часть параметра области: scope = [resource url]//[scope values, for example, openid] если ресурс не передается здесь или в области, AD FS использует url-адрес ресурса по умолчанию urn:microsoft:userinfo. Настроить политики ресурсов userinfo, такие как MFA, выдача или авторизация, невозможно. |
scope | optional | Список областей, разделённых пробелами. |
response_mode | optional | Указывает метод, с помощью которого результирующий маркер будет отправлен приложению. Может быть одним из следующих методов: - запрос - фрагмент - form_post query предоставляет код в качестве параметра строки запроса на вашем URI перенаправления. Если вы запрашиваете код, можно использовать запрос, фрагмент или form_post.
form_post выполняет запрос POST, который содержит код для URI перенаправления. |
state | optional | Значение, включенное в запрос, должно быть возвращено также в ответе токена. Это может быть строка любого нужного содержимого. Как правило, для предотвращения подделки межсайтовых запросовиспользуется генерируемое случайным образом уникальное значение. Также в этом значении кодируются сведения о состоянии пользователя в приложении перед выполнением запроса на аутентификацию. Например, это могут быть сведения об открытой на тот момент странице или представлении. |
prompt | optional | Указывает тип необходимого взаимодействия с пользователем. Единственными допустимыми значениями в настоящее время являются вход и нет. - prompt=login заставляет пользователя вводить свои учетные данные в этом запросе, отрицая единый вход.
- prompt=none — это противоположность, которая гарантирует, что пользователю не будет показано никаких интерактивных запросов. Если запрос не может быть выполнен бесшумно с помощью единого входа, AD FS возвращает ошибку interaction_required. |
login_hint | optional | Можно применять для предварительного заполнения поля имени пользователя или адреса электронной почты на странице входа пользователя (если имя пользователя известно заранее). Часто приложения используют этот параметр во время повторной проверки подлинности, уже извлекая имя пользователя из предыдущего входа с помощью upn утверждения id_token . |
domain_hint | optional | Если это значение указано, процесс обнаружения на основе домена, который пользователь проходит на странице входа, пропускается, что обеспечивает более оптимизированный пользовательский опыт. |
code_challenge_method | optional | Метод, используемый для кодирования code_verifier для параметра code_challenge. Может быть одним из следующих значений: — обычный — S256 . Если это значение не указано, считается, что code_challenge является открытым текстом, если code_challenge включен. AD FS поддерживает как простое кодирование, так и S256. Дополнительные сведения см. в PKCE RFC. |
code_challenge | optional | Используется для обеспечения выдачи кодов авторизации с помощью подтверждающего ключа для обмена кодом (PKCE) из собственного клиента. Является обязательным, если указан параметр code_challenge_method . Дополнительные сведения см. в PKCE RFC. |
На текущем этапе пользователю предлагается ввести учетные данные и завершить аутентификацию. После проверки подлинности пользователя AD FS возвращает ответ приложению на указанное redirect_uri
, используя метод, указанный в параметре response_mode
.
Успешный ответ
Успешный ответ при использовании response_mode=query выглядит следующим образом:
GET https://adfs.contoso.com/common/oauth2/nativeclient?
code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...
&state=12345
Parameter | Description |
---|---|
code | Маркер authorization_code , запрошенный приложением. Приложение может использовать код авторизации для запроса токена доступа для целевого ресурса.
authorization_code s имеют короткий срок жизни. Обычно срок действия истекает примерно через 10 минут. |
state | Если запрос содержит параметр state , то в ответе должно отображаться то же значение. Приложение должно убедиться, что значения параметра state в запросе и отклике идентичны. |
Запросите маркер доступа
Теперь, когда вы приобрели authorization_code
и получили разрешение пользователя, вы можете активировать код для требуемого access_token
ресурса. Активация кода путем отправки запроса POST в конечную точку /token:
// Line breaks for legibility only
POST /adfs/oauth2/token HTTP/1.1
Host: https://adfs.contoso.com/
Content-Type: application/x-www-form-urlencoded
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&code=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq3n8b2JRLk4OxVXr...
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&grant_type=authorization_code
&client_secret=JqQX2PNo9bpM0uEihUPzyrh // NOTE: Only required for confidential clients (web apps)
Parameter | Required/optional | Description |
---|---|---|
client_id | required | Идентификатор приложения (клиента), назначенный вашему приложению в AD FS. |
grant_type | required | Должен быть authorization_code для потока кода авторизации. |
code | required | Значение authorization_code , полученное на первом этапе потока. |
redirect_uri | required | То же значение redirect_uri , что использовалось для получения authorization_code . |
client_secret | необходим для веб-приложений | Секрет приложения, который вы создали во время регистрации приложения в AD FS. Не следует использовать секрет приложения в нативном приложении, так как на устройствах нет возможности надежно хранить client_secrets. Этот параметр необходим для веб-приложений и веб-API, которые имеют возможность безопасно хранить client_secret на стороне сервера. Секрет клиента должен быть преобразован в формат URL-адреса перед отправкой. Эти приложения также могут использовать проверку подлинности на основе ключей, подписав JWT и добавив ее в качестве параметра client_assertion. |
code_verifier | optional | Тот же code_verifier , который использовался для получения кода авторизации. Является обязательным, если в запросе на код авторизации использовался PKCE. Дополнительные сведения см. в PKCE RFC. Этот параметр применяется к AD FS 2019 и более поздним версиям. |
Успешный ответ
Успешный ответ токена выглядит следующим образом:
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
"token_type": "Bearer",
"expires_in": 3599,
"refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
"refresh_token_expires_in": 28800,
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD...",
}
Parameter | Description |
---|---|
access_token | Запрашиваемый маркер доступа. Приложение может использовать этот маркер для проверки подлинности в защищенном ресурсе (веб-API). |
token_type | Указывает значение типа токена. В AD FS поддерживается только один тип — Bearer (носитель). |
expires_in | Срок действия токена доступа (в секундах). |
refresh_token | Маркер обновления OAuth 2.0. Приложение может использовать этот маркер для получения дополнительных маркеров доступа после истечения срока действия текущего маркера доступа. Refresh_tokens являются длительными и могут использоваться для сохранения доступа к ресурсам в течение длительного периода времени. |
refresh_token_expires_in | Срок действия токена обновления (в секундах). |
id_token | A JWT. Приложение может расшифровать сегменты этого маркера, чтобы запросить сведения о выполнившем вход пользователе. Эти значения можно кэшировать и (или) отображать в приложении, но их не следует использовать в любых процессах авторизации или обеспечения безопасности. |
Используйте токен доступа
GET /v1.0/me/messages
Host: https://webapi.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
Обновление процесса выдачи токена
Срок действия токенов доступа весьма ограничен, поэтому их нужно обновлять после его истечения, чтобы снова продолжить доступ к ресурсам. Это можно сделать, отправив другой запрос POST в /token
конечную точку, на этот раз предоставив refresh_token вместо кода. Токены обновления действительны для всех разрешений, для которых клиент уже получил токены доступа.
Маркеры обновления не имеют указанных сроков действия. Обычно у маркеров обновления относительно продолжительный срок действия. Но в некоторых случаях маркер обновления оказывается устаревшим или отозванным или не имеет достаточных привилегий для требуемого действия. Ваше приложение должно ожидать и правильно обрабатывать ошибки, возвращаемые конечной точкой выдачи токена.
Хотя маркеры обновления не отзываются при получении новых маркеров доступа, ожидается, что старый маркер обновления следует удалить. Спецификация OAuth 2.0 говорит: "Сервер авторизации МОЖЕТ выдавать новый маркер обновления, в этом случае клиент должен отменить старый маркер обновления и заменить его новым маркером обновления. Сервер авторизации может отозвать старый маркер обновления после выдачи нового маркера обновления клиенту". AD FS выдает маркеры обновления, когда время существования нового маркера обновления превышает предыдущее время существования маркера обновления. Дополнительные сведения о времени существования маркера обновления AD FS см. в параметрах единого входа AD FS.
// Line breaks for legibility only
POST /adfs/oauth2/token HTTP/1.1
Host: https://adfs.contoso.com
Content-Type: application/x-www-form-urlencoded
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&refresh_token=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq...
&grant_type=refresh_token
&client_secret=JqQX2PNo9bpM0uEihUPzyrh // NOTE: Only required for confidential clients (web apps)
Parameter | Required/optional | Description |
---|---|---|
client_id | required | Идентификатор приложения (клиента), который AD FS назначил вашему приложению. |
grant_type | required | Должен быть refresh_token для этого участка потока кода авторизации. |
resource | optional | URL-адрес веб-API. Примечание. Если используется клиентская библиотека MSAL, параметр ресурса не отправляется. Вместо этого URL-адрес ресурса отправляется как часть параметра области: scope = [resource url]//[scope values, for example, openid] если ресурс не передается здесь или в параметре области, AD FS использует URL-адрес ресурса по умолчанию urn:microsoft:userinfo. Политики ресурса userinfo, такие как MFA, политики выдачи или авторизации, не подлежат настройке. |
scope | optional | Список областей, разделённых пробелами. |
refresh_token | required | Токен обновления, полученный на второй части процесса. |
client_secret | необходим для веб-приложений | Секрет, созданный для вашего приложения на портале регистрации приложений. Его не следует использовать в собственном приложении, так как client_secrets невозможно надежно хранить на устройствах. Этот параметр необходим для веб-приложений и веб-API, которые имеют возможность безопасно хранить client_secret на стороне сервера. Эти приложения также могут использовать проверку подлинности на основе ключей, подписав JWT и добавив ее в качестве параметра client_assertion. |
Успешный ответ
Успешный ответ токена выглядит следующим образом:
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
"token_type": "Bearer",
"expires_in": 3599,
"refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
"refresh_token_expires_in": 28800,
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD...",
}
Parameter | Description |
---|---|
access_token | Запрашиваемый маркер доступа. Приложение может использовать этот маркер для аутентификации в защищенном ресурсе, таком как веб-API. |
token_type | Указывает значение типа токена. В AD FS поддерживается только один тип — Bearer (носитель). |
expires_in | Срок действия токена доступа (в секундах). |
scope | Области, для которых действителен маркер доступа. |
refresh_token | Маркер обновления OAuth 2.0. Приложение может использовать этот маркер для получения дополнительных маркеров доступа после истечения срока действия текущего маркера доступа. Обновляемые токены имеют длительное действие и могут использоваться для сохранения доступа к ресурсам на продолжительное время. |
refresh_token_expires_in | Срок действия токена обновления (в секундах). |
id_token | A JWT. Приложение может расшифровать сегменты этого маркера, чтобы запросить сведения о выполнившем вход пользователе. Эти значения можно кэшировать и (или) отображать в приложении, но их не следует использовать в любых процессах авторизации или обеспечения безопасности. |
Поддержка Proof Key for Code Exchange (PKCE) для OAuth
Общедоступные клиенты OAuth, использующие предоставление кода авторизации, уязвимы для атак перехвата кода авторизации, как описано в RFC 7636. Чтобы устранить эти атаки, по состоянию на Windows Server 2019 AD FS поддерживает ключ подтверждения для обмена кодом (PKCE) для потока предоставления кода авторизации OAuth.
Спецификация поддержки PKCE добавляет дополнительные параметры в запросы на авторизацию и токен доступа OAuth 2.0. На следующей схеме показана структура процесса PKCE, когда клиент обращается к AD FS в Windows Server 2019.
В разделе с меткой A клиент создает и записывает секрет с именем code_verifier
и получает преобразованную версию секрета t(code_verifier)
, которая code_challenge
также называется . Затем клиент отправляет секрет в запросе авторизации OAuth 2.0 вместе с методом t_m
преобразования.
В разделе с меткой B конечная точка авторизации реагирует как обычно, но записывает t(code_verifier)
секрет и метод преобразования.
В разделе C клиент отправляет код авторизации в запросе маркера доступа обычным образом, но включает code_verifier
секрет, созданный в разделе A.
В разделе с меткой code_verifier
D AD FS преобразует секрет и сравнивает его с секретом t(code_verifier)
из раздела B. Если их значения не равны, AD FS запрещает доступ.
Выбор нескольких поставщиков проверки подлинности для одной политики правил в Windows Server 2019
AD FS уже поддерживает инициирование дополнительной проверки подлинности на основе политики правил утверждений (RP). Эти политики можно задать для определенной RP или на глобальном уровне. Вы можете задать дополнительную политику проверки подлинности для конкретной RP, открыв PowerShell в качестве администратора и выполнив командлет Set-AdfsRelyingPartyTrust, передав параметр AdditionalAuthenticationRules или AdditionalAuthenticationRulesFile. Чтобы установить его глобально, администратор может использовать командлет Set-AdfsAdditionalAuthenticationRule. Настройка дополнительных политик позволяет использовать несколько поставщиков проверки подлинности для одного приложения.
Правила утверждений предоставляют возможность выбора поставщика проверки подлинности для дополнительной проверки подлинности, которая оказывается полезной в ситуациях, когда клиенты переключаются между поставщиками или требуют отдельного поставщика для определенных приложений. По состоянию на Windows Server 2019 можно использовать правила утверждений, чтобы решить, какой другой поставщик проверки подлинности будет вызываться для дополнительной проверки подлинности. Эта функция полезна в двух сценариях:
Пользователи переходят с одного поставщика проверки подлинности на другой. При подключении пользователей к более новому поставщику проверки подлинности они могут использовать группы для управления дополнительным поставщиком проверки подлинности, используемым службой.
Пользователям требуется конкретный дополнительный поставщик проверки подлинности для определенных приложений, но также необходимо использовать другой метод для других приложений.
Эти параметры можно настроить, выполнив следующую команду из других политик проверки подлинности:
Set-AdfsAdditionalAuthenticationRule -AdditionalAuthenticationRules 'c:[type == "http://schemas.microsoft.com/ws/2012/01/insidecorporatenetwork", value == "false"] => issue(type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", value = "http://schemas.microsoft.com/claims/multipleauthn" );'
Чтобы настроить это правило, необходимо выдать утверждение http://schemas.microsoft.com/claims/authnmethodsproviders
из других политик проверки подлинности. Значение этого утверждения должно быть переменной Name поставщика аутентификации.
Вы также можете изменить эту конфигурацию правила, чтобы пользователи могли переходить с одного поставщика проверки подлинности на другой. Например, предположим, что вы хотите изменить одну группу, управляемую с помощью многофакторной проверки подлинности (MFA) Microsoft Entra, и одну группу для использования сертификатов в качестве дополнительного поставщика проверки подлинности.
Если вы хотите отслеживать, сколько пользователей регистрируются для проверки подлинности MFA и сертификатов, можно выполнить следующую команду, указав значения, заменяемые значениями, соответствующими вашей организации:
'c:[type == "http://schemas.microsoft.com/ws/2012/01/insidecorporatenetwork", Value == "false"] => issue(type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", Value = "http://schemas.microsoft.com/claims/multipleauthn" );
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Value == "S-1-5-21-608905689-872870963-3921916988-12345"] => issue(Type = "http://schemas.microsoft.com/claims/authnmethodsproviders", Value = "AzureMfaAuthentication");
not exists([Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Value=="S-1-5-21-608905689-872870963-3921916988-12345"]) => issue(Type = "http://schemas.microsoft.com/claims/authnmethodsproviders", Value = "CertificateAuthentication");’
Затем можно задать первое приложение, которое вызывается AppA
, чтобы использовать MFA в качестве дополнительного поставщика проверки подлинности, выполнив следующую команду:
Set-AdfsRelyingPartyTrust -TargetName AppA -AdditionalAuthenticationRules 'c:[type == "http://schemas.microsoft.com/ws/2012/01/insidecorporatenetwork", Value == "false"] => issue(type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", Value = "http://schemas.microsoft.com/claims/multipleauthn" );
c:[] => issue(Type = "http://schemas.microsoft.com/claims/authnmethodsproviders", Value = "AzureMfaAuthentication");'
Наконец, можно задать второе приложение, вызываемое AppB
для использования сертификатов в качестве дополнительного поставщика проверки подлинности, выполнив следующую команду:
Set-AdfsRelyingPartyTrust -TargetName AppB -AdditionalAuthenticationRules 'c:[type == "http://schemas.microsoft.com/ws/2012/01/insidecorporatenetwork", Value == "false"] => issue(type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", Value = "http://schemas.microsoft.com/claims/multipleauthn" );
c:[] => issue(Type = "http://schemas.microsoft.com/claims/authnmethodsproviders", Value = "CertificateAuthentication");'
Администраторы также могут создавать правила для разрешения нескольких дополнительных поставщиков проверки подлинности. В этом случае AD FS показывает выданных поставщиков методов проверки подлинности, и пользователь может выбрать любой из них. Чтобы позволить использовать несколько дополнительных поставщиков аутентификации, они должны выдавать несколько утверждений с помощью значения http://schemas.microsoft.com/claims/authnmethodsproviders
.
Если оценка утверждений не возвращает ни одного из поставщиков проверки подлинности, AD FS возвращается к предыдущему состоянию и отображает список всех дополнительных поставщиков проверки подлинности, настроенных администратором в AD FS. Затем пользователь должен вручную выбрать соответствующего поставщика проверки подлинности.
Если предпочтительный поставщик проверки подлинности отсутствует в списке, можно запустить следующий командлет, чтобы просмотреть все поддерживаемые поставщики:
(Get-AdfsGlobalAuthenticationPolicy).AdditionalAuthenticationProvider
Значение http://schemas.microsoft.com/claims/authnmethodsproviders
для утверждения должно совпадать с одним из имен поставщиков, указанных в списке, который вернул AD FS.
AD FS не поддерживает активацию определенного дополнительного поставщика проверки подлинности, если RP использует политики контроля доступа в AD FS Windows Server 2016. При перемещении приложения из политики управления доступом AD FS копирует соответствующую политику из политики управления доступом в AdditionalAuthenticationRules и IssuanceAuthorizationRules. Если администратор хочет использовать определенный поставщик проверки подлинности, он должен прекратить использование политики управления доступом и вместо этого изменить AdditionalAuthenticationRules.
On-Behalf-Of flow
Note
Корпорация Майкрософт настоятельно рекомендует переход на идентификатор Microsoft Entra, а не обновление до более новой версии AD FS. Дополнительные сведения о потоке On-Behalf-Of в Microsoft Entra ID см. в разделе "Поток On-Behalf-Of в платформе удостоверений Microsoft".
Поток On-Behalf-Of (OBO) в OAuth 2.0 используется в том случае, когда приложение вызывает службу или веб-API, который, в свою очередь, должен вызывать другую службу или веб-API. Идея состоит в том, чтобы распространить делегированное удостоверение пользователя и разрешения с помощью цепочки запросов. Чтобы служба среднего уровня выполняла аутентифицированные запросы к подчиненной службе, она должна защитить маркер доступа от AD FS от имени пользователя.
Схема протокола
Предположим, что пользователь проходит проверку подлинности в приложении с помощью потока предоставления кода авторизации OAuth 2.0, описанного в предыдущем разделе. На этом этапе приложение содержит маркер доступа для API А (маркер A) с утверждениями пользователя и разрешением на доступ к веб-API среднего уровня (API A). Убедитесь, что клиент запрашивает область user_impersonation в токене. Теперь API A должен выполнить запрос к веб-API нижнего уровня (API B) с проверкой подлинности.
Последующие шаги образуют поток OBO. Эти шаги поясняются на следующей схеме.
- Клиентское приложение выполняет запрос к API A с токеном A. (При настройке потока OBO в AD FS убедитесь, что выбрана область
user_impersonation
, и клиенты запрашивают областьuser_impersonation
в запросе.) - API A проходит проверку подлинности в конечной точке выдачи маркера AD FS и запрашивает маркер для доступа к API B. (При настройке этого потока в AD FS убедитесь, что API A также зарегистрирован в качестве серверного приложения с идентификатором клиента, который имеет то же значение, что и идентификатор ресурса в API A.).
- Конечная точка выдачи маркера AD FS проверяет учетные данные API А с использованием маркера А и выдает маркер доступа для API Б (маркер Б).
- Маркер B задается в заголовке авторизации запроса к API B.
- API B возвращает данные из защищенного ресурса.
Запрос токена доступа между службами
Чтобы запросить токен доступа, выполните HTTP POST запрос к конечной точке токенов AD FS с параметрами, описанными в следующих разделах.
Первый сценарий: запрос токена доступа с помощью общего секрета
Для совместного секрета запрос на маркер доступа между службами содержит следующие параметры:
Parameter | Required/optional | Description |
---|---|---|
grant_type | required | Тип запроса токена. Для запроса с использованием JWT необходимо указать значение urn:ietf:params:oauth:grant-type:jwt-bearer. |
client_id | required | Идентификатор клиента, который вы настраиваете при регистрации первого веб-API в качестве серверного приложения (приложение среднего уровня). Он должен совпадать с идентификатором ресурса, используемым в первом окне, то есть URL-адресом первого веб-API. |
client_secret | required | Секрет приложения, созданный во время регистрации серверного приложения в AD FS. |
assertion | required | Значение токена, используемого в запросе. |
requested_token_use | required | Указывает, как должен быть обработан запрос. В потоке OBO необходимо задать значение on_behalf_of. |
resource | required | Идентификатор ресурса, предоставленный при регистрации первого веб-API в качестве серверного приложения (приложение среднего уровня). Идентификатор ресурса должен быть URL-адресом вызовов приложения второго веб-API среднего уровня от имени клиента. |
scope | optional | Разделенный пробелами список областей для запроса маркера. |
Example
Следующий HTTP POST
запрашивает токен доступа и токен обновления.
// Line breaks for legibility only
POST /adfs/oauth2/token HTTP/1.1
Host: adfs.contoso.com
Content-Type: application/x-www-form-urlencoded
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
&client_id=https://webapi.com/
&client_secret=BYyVnAt56JpLwUcyo47XODd
&assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIm…
&resource=https://secondwebapi.com/
&requested_token_use=on_behalf_of
&scope=openid
Второй сценарий: запрос токена доступа с помощью сертификата
Запрос токена межслужебного доступа, использующего сертификат, содержит следующие параметры:
Parameter | Required/optional | Description |
---|---|---|
grant_type | required | Тип запроса токена. Для запроса с использованием JWT необходимо указать значение urn:ietf:params:oauth:grant-type:jwt-bearer. |
client_id | required | Идентификатор клиента, который вы настраиваете при регистрации первого веб-API в качестве серверного приложения (приложение среднего уровня). Он должен совпадать с идентификатором ресурса, используемым в первом окне, то есть URL-адресом первого веб-API. |
client_assertion_type | required | Значение должно быть urn:ietf:params:oauth:client-assert-type:jwt-bearer. |
client_assertion | required | Утверждение (JWT), которое необходимо создать и подписать с помощью сертификата, который вы зарегистрировали в качестве учетных данных для вашего приложения. |
assertion | required | Значение токена, используемого в запросе. |
requested_token_use | required | Указывает, как должен быть обработан запрос. В потоке OBO необходимо задать значение on_behalf_of. |
resource | required | Идентификатор ресурса, предоставленный при регистрации первого веб-API в качестве серверного приложения (приложение среднего уровня). Идентификатор ресурса должен быть URL-адресом вызовов приложения второго веб-API среднего уровня от имени клиента. |
scope | optional | Разделенный пробелами список областей для запроса маркера. |
Обратите внимание, что параметры почти одинаковы. Этот пример аналогичен запросу по общему секрету, за исключением того, что параметр client_secret заменяется двумя параметрами: client_assertion_type и client_assertion.
Example
Следующий HTTP POST запрашивает маркер доступа для веб-API с сертификатом.
// Line breaks for legibility only
POST /adfs/oauth2/token HTTP/1.1
Host: https://adfs.contoso.com
Content-Type: application/x-www-form-urlencoded
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
&client_id= https://webapi.com/
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=eyJhbGciOiJSUzI1NiIsIng1dCI6Imd4OHRHeXN5amNS…
&resource=https://secondwebapi.com/
&requested_token_use=on_behalf_of
&scope= openid
Ответ маркера доступа от службы к службе
Ответ успешного выполнения — это ответ JSON OAuth 2.0, имеющий следующие параметры.
Parameter | Description |
---|---|
token_type | Указывает значение типа токена. В AD FS поддерживается только один тип — Bearer (носитель). |
scope | Область доступа, предоставляемая токеном. |
expires_in | Длительность времени в секундах, в течение которого токен доступа является действительным. |
access_token | Запрашиваемый маркер доступа. Вызывающая служба может использовать этот токен для проверки подлинности принимающей службы. |
id_token | A JWT. Приложение может расшифровать сегменты этого маркера, чтобы запросить сведения о выполнившем вход пользователе. Эти значения можно кэшировать и (или) отображать в приложении, но их не следует использовать в любых процессах авторизации или обеспечения безопасности. |
refresh_token | Токен обновления для запрошенного токена доступа. Вызывающая служба может использовать этот токен для запроса другого токена доступа после того, как срок действия текущего токена доступа истек. |
Refresh_token_expires_in | Срок действия маркера обновления (в секундах). |
Пример успешного ответа
Ниже представлен пример успешного ответа на запрос токена доступа для веб-API.
{
"token_type": "Bearer",
"scope": openid,
"expires_in": 3269,
"access_token": "eyJ0eXAiOiJKV1QiLCJub25jZSI6IkFRQUJBQUFBQUFCbmZpRy1t"
"id_token": "aWRfdG9rZW49ZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKU1V6STFOa"
"refresh_token": "OAQABAAAAAABnfiG…"
"refresh_token_expires_in": 28800,
}
Использование маркера доступа для доступа к защищенному ресурсу
Теперь служба среднего уровня может использовать маркер, полученный в предыдущем примере ответа, для выполнения аутентифицированных запросов к нижестоящему веб-API. Задайте маркер в заголовке авторизации.
Example
GET /v1.0/me HTTP/1.1
Host: https://secondwebapi.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJub25jZSI6IkFRQUJBQUFBQUFCbmZpRy1tQ…
Поток предоставления учетных данных клиента
Note
Корпорация Майкрософт настоятельно рекомендует переход на идентификатор Microsoft Entra, а не обновление до более новой версии AD FS. Дополнительные сведения о потоке предоставления учетных данных клиента в Microsoft Entra ID см. в разделе «Поток предоставления учетных данных клиента» на платформе удостоверения личности Microsoft.
Учетные данные клиента OAuth 2.0, указанные в RFC 6749 , можно использовать для доступа к размещенным в Интернете ресурсам с помощью удостоверения приложения. Этот тип предоставления разрешения часто используется для взаимодействия между серверами, которое должно выполняться в фоновом режиме без непосредственного взаимодействия с пользователем. Такие типы приложений часто называют управляющими программами или учетными записями служб.
Процесс предоставления учетных данных клиента OAuth 2.0 позволяет веб-службе (конфиденциальный клиент) вместо олицетворения пользователя использовать свои собственные учетные данные для аутентификации при вызове другой веб-службы. В этом сценарии клиент обычно является веб-службой среднего уровня, службой управляющей программы или веб-сайтом. Для более высокого уровня гарантии AD FS также позволяет вызывающей службе использовать сертификат (вместо общего секрета) в качестве учетных данных.
Схема протокола
На следующей схеме показан поток предоставления учетных данных клиента.
Запросить токен
Чтобы получить токен с использование предоставления учетных данных клиента, отправьте POST
запрос к конечной точке /token AD FS, как показано в следующих разделах.
Первый сценарий: запрос токена доступа с помощью общего секрета
POST /adfs/oauth2/token HTTP/1.1
// Line breaks for legibility only
Host: https://adfs.contoso.com
Content-Type: application/x-www-form-urlencoded
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&client_secret=qWgdYAmab0YSkuL1qKv5bPX
&grant_type=client_credentials
Parameter | Required/optional | Description |
---|---|---|
client_id | required | Идентификатор приложения (клиента), назначенный вашему приложению в AD FS. |
scope | optional | Разделенный пробелами список областей , для которого необходимо согласие пользователя. |
client_secret | required | Секрет клиента, который вы создали для приложения на портале регистрации приложений. Секрет клиента должен быть преобразован в формат URL-адреса перед отправкой. |
grant_type | required | Должен иметь значение client_credentials . |
Второй сценарий: запрос токена доступа с помощью сертификата
POST /adfs/oauth2/token HTTP/1.1
// Line breaks for legibility only
Host: https://adfs.contoso.com
Content-Type: application/x-www-form-urlencoded
&client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=eyJhbGciOiJSUzI1NiIsIng1dCI6Imd4OHRHeXN5amNScUtqRlBuZDdSRnd2d1pJMCJ9.eyJ{a lot of characters here}M8U3bSUKKJDEg
&grant_type=client_credentials
Parameter | Required/optional | Description |
---|---|---|
client_assertion_type | required | Значение должно быть задано как urn:ietf:params:oauth:client-assert-type:jwt-bearer. |
client_assertion | required | Утверждение (JWT), которое необходимо создать и подписать с помощью сертификата, зарегистрированного в качестве учетных данных вашего приложения. |
grant_type | required | Должен иметь значение client_credentials . |
client_id | optional | Идентификатор приложения (клиента), который AD FS назначил вашему приложению. Это часть client_assertion, поэтому здесь не требуется. |
scope | optional | Разделенный пробелами список областей , для которого необходимо согласие пользователя. |
Используйте маркер
Теперь, когда вы приобрели токен, используйте его для выполнения запросов к ресурсу. Когда завершится срок действия маркера, повторите запрос к конечной точке /token, чтобы получить новый маркер доступа.
GET /v1.0/me/messages
Host: https://webapi.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
Процесс предоставления учетных данных пароля владельца ресурса (не рекомендуется)
Note
Корпорация Майкрософт настоятельно рекомендует переход на идентификатор Microsoft Entra, а не обновление до более новой версии AD FS. Дополнительные сведения о потоке предоставления учетных данных владельца ресурса в Microsoft Entra ID см. в разделе Поток предоставления учетных данных владельца ресурса на платформе удостоверений Microsoft.
Предоставление учетных данных владельца ресурса (ROPC) позволяет приложению выполнять вход пользователя путем ввода пароля напрямую. Поток ROPC требует высокой степени доверия и вовлечения пользователей. Этот поток следует использовать только в том случае, если вы не можете использовать другие потоки, которые более безопасны.
Схема протокола
На следующей схеме показано представление потока ROPC.
Запрос авторизации
Поток ROPC состоит из одного запроса: он отправляет идентификатор клиента и учетные данные пользователя поставщику удостоверений, а в ответ получает токены. Клиент должен запросить у пользователя адрес электронной почты (UPN) и пароль перед выполнением этого действия. Сразу после успешного выполнения запроса клиент обязан безопасно удалить из памяти учетные данные пользователя. Ни в коем случае нельзя сохранять их.
// Line breaks and spaces are for legibility only
POST /adfs/oauth2/token HTTP/1.1
Host: https://adfs.contoso.com
Content-Type: application/x-www-form-urlencoded
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&scope= openid
&username=myusername@contoso.com
&password=SuperS3cret
&grant_type=password
Parameter | Required/optional | Description |
---|---|---|
client_id | required | Код клиента. |
grant_type | required | Необходимо задать пароль. |
username | required | Адрес электронной почты пользователя. |
password | required | Пароль пользователя. |
scope | optional | Список областей, разделённых пробелами. |
Ответ об успешной аутентификации
Ниже приведен пример успешного ответа на маркер.
{
"token_type": "Bearer",
"scope": "openid",
"expires_in": 3599,
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIn...",
"refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
"refresh_token_expires_in": 28800,
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDR..."
}
Parameter | Description |
---|---|
token_type | Всегда устанавливайте значение на Bearer. |
scope | Если возвращен маркер доступа, этот параметр содержит список областей, для которых действует этот маркер. |
expires_in | Количество секунд, в течение которых действует предоставленный маркер доступа. |
access_token | Выдается для запрошенных областей. |
id_token | A JWT. Приложение может расшифровать сегменты этого маркера, чтобы запросить сведения о выполнившем вход пользователе. Эти значения можно кэшировать и (или) отображать в приложении, но их не следует использовать в любых процессах авторизации или обеспечения безопасности. |
refresh_token_expires_in | Срок действия прилагаемого маркера обновления (в секундах). |
refresh_token | Выдано, если исходный параметр области включал offline_access. |
Токен обновления можно использовать для получения новых токенов доступа и токенов обновления, используя тот же процесс, который описан в разделе о потоке предоставления кода проверки подлинности этой статьи.
Поток кода устройства
Note
Корпорация Майкрософт настоятельно рекомендует переход на идентификатор Microsoft Entra, а не обновление до более новой версии AD FS. Дополнительные сведения о потоке кода устройства в Microsoft Entra ID см. в разделе Device code flow in Microsoft identity platform.
С помощью предоставления кода устройства пользователи могут входить на устройства с ограниченными возможностями для ввода данных, например на интеллектуальный телевизор, устройство IoT или принтер. Чтобы активировать этот процесс, пользователь должен выполнить вход, посетив веб-страницу на другом устройстве в браузере. После входа пользователя в систему устройство сможет получать токены доступа и токены обновления по мере надобности.
Схема протокола
Весь поток кода устройства похож на поток, показанный на следующей схеме. Каждый из шагов описан далее в этой статье.
Запрос авторизации устройства
Клиент должен сначала обратиться к серверу проверки подлинности и получить код для устройства и пользователя, который используется для запуска проверки подлинности. Клиент собирает этот запрос из конечной точки /devicecode
. В этом запросе клиент также должен добавить разрешения, которые ему требуется получить от пользователя. С момента отправки этого запроса пользователь может выполнить вход только через 15 минут (обычное значение для expires_in), поэтому только выполните этот запрос, если пользователь указал, что он готов войти.
// Line breaks are for legibility only
POST https://adfs.contoso.com/adfs/oauth2/devicecode
Content-Type: application/x-www-form-urlencoded
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
scope=openid
Parameter | Condition | Description |
---|---|---|
client_id | required | Идентификатор приложения (клиента), который вашему приложению назначил AD FS. |
scope | optional | Список областей, разделённых пробелами. |
Ответ авторизации устройства
Успешный ответ — это объект JSON, содержащий необходимые сведения для входа пользователя.
Parameter | Description |
---|---|
device_code | Длинная строка, используемая для проверки сеанса между клиентом и сервером авторизации. Клиент использует этот параметр для запроса токена доступа от сервера авторизации. |
user_code | Короткая строка, которая отображается пользователю, для идентификации того же сеанса на другом устройстве. |
verification_uri | URI, куда пользователь должен перейти вместе с user_code для входа. |
verification_uri_complete | Универсальный код ресурса (URI), к которому пользователь должен перейти с помощью user_code для входа. Он предварительно заполнен user_code, так что пользователю не нужно вводить это значение. |
expires_in | Количество секунд до истечения срока действия device_code и user_code. |
interval | Число секунд ожидания клиентом между опрашивающими запросами. |
message | Понятная пользователю строка с инструкциями. Его можно локализовать, включив в запрос параметр в форме ?mkt=xx-XX, заполнив соответствующий код языковой культуры. |
Проверка подлинности пользователя
После того как клиент получает user_code и verification_uri, он отображает эти сведения пользователю и инструктирует его войти в систему с помощью мобильного телефона или браузера ПК. Кроме того, клиент может использовать QR-код или аналогичный механизм для отображения verification_uri_complete, который устраняет необходимость ввода user_code пользователем.
Когда пользователь проходит проверку подлинности на verification_uri, клиент должен опрашивать конечную точку /token
для запрошенного токена с помощью device_code.
POST https://adfs.contoso.com /adfs/oauth2/token
Content-Type: application/x-www-form-urlencoded
grant_type: urn:ietf:params:oauth:grant-type:device_code
client_id: 00001111-aaaa-2222-bbbb-3333cccc4444
device_code: GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8
Parameter | Required/optional | Description |
---|---|---|
grant_type | required | Должен быть urn:ietf:params:oauth:grant-type:device_code. |
client_id | required | Должен соответствовать client_id, используемому в первоначальном запросе. |
code | required | Device_code, возвращенный в запросе авторизации устройства. |
Ответ об успешной аутентификации
Успешный ответ токена может включать следующие параметры:
Parameter | Description |
---|---|
token_type | Всегда Bearer . |
scope | Если токен доступа был возвращен, он выводит список областей, для которых допустим токен доступа. |
expires_in | Количество секунд, в течение которых включен маркер доступа, действителен. |
access_token | Выдается для запрошенных областей. |
id_token | Выдано, если исходный параметр scope включал область openid. |
refresh_token | Выдано, если исходный параметр области включал offline_access. |
refresh_token_expires_in | Количество секунд, в течение которых токен обновления является действительным. |
Связанный контент
Полный список руководств с пошаговыми инструкциями по использованию соответствующих потоков вы найдете в разделе «Разработка AD FS».