Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Предупреждение
Это содержимое предназначено для более старой конечной точки Azure AD версии 1.0. Используйте платформу удостоверений Майкрософт для новых проектов.
Поток OAuth 2.0 On-Behalf-Of (OBO) позволяет приложению, которое вызывает службу или веб-API, передавать аутентификацию пользователей другой службе или веб-API. Поток OBO распространяет делегированное удостоверение пользователя и разрешения через цепочку запросов. Чтобы служба среднего уровня выполняла аутентифицированные запросы к нижней службе, она должна защитить маркер доступа из Azure Active Directory (Azure AD) от имени пользователя.
Это важно
По состоянию на май 2018 года id_token
нельзя использовать для потока on-Behalf-Of. Одностраничные веб-приложения (SPAs) должны передавать токен доступа в конфиденциальный клиент среднего уровня для выполнения потоков OBO. Дополнительные сведения о клиентах, имеющих возможность выполнять вызовыBehalf-Of, см.: ограничения.
Схема потока от имени
Поток OBO начинается после аутентификации пользователя в приложении, использующем поток предоставления кода авторизации OAuth 2.0 . На этом этапе приложение отправляет маркер доступа (токен A) в веб-API среднего уровня (API A), содержащий утверждения пользователя и согласие на доступ к API A. Затем API A делает прошедший проверку подлинности запрос к нижестоящему веб-API (API B).
Эти действия составляют поток On-Behalf-Of:
- Клиентское приложение выполняет запрос к API A с маркером A.
- API A выполняет проверку подлинности в конечной точке выдачи маркера Azure AD и запрашивает маркер для доступа к API B.
- Конечная точка выдачи маркера Azure AD проверяет учетные данные API A с маркером A и выдает маркер доступа для API B (токен B).
- Запрос к API B содержит маркер B в заголовке авторизации.
- API B возвращает данные из защищенного ресурса.
Примечание.
Утверждение аудитории в токене доступа, используемом для запроса токена для подчиненной службы, должно быть идентификатором службы, совершающей OBO-запрос. Токен также должен быть подписан при помощи глобального ключа подписи Azure Active Directory, который используется по умолчанию для приложений, зарегистрированных через регистрации приложений на портале.
Регистрация приложения и службы в Azure AD
Зарегистрируйте службу среднего уровня и клиентское приложение в Azure AD.
Зарегистрируйте службу среднего уровня
- Войдите на портал Azure.
- На верхней панели выберите свою учетную запись пользователя и взгляните на список Каталог, чтобы выбрать арендатора Active Directory для вашего приложения.
- Выберите дополнительные службы на левой панели и выберите Azure Active Directory.
- Выберите Регистрации приложений, а затем Новую регистрацию.
- Введите понятное имя приложения и выберите тип приложения.
- В разделе Поддерживаемые типы учетных записей выберите Accounts in any organizational directory and personal Microsoft accounts (Учетные записи в любом каталоге организации и личные учетные записи Майкрософт).
- Задайте URI перенаправления на базовый URL-адрес.
- Выберите Зарегистрировать, чтобы создать приложение.
- На портале Azure выберите ваше приложение, затем выберите сертификаты & секреты.
- Выберите Новый секрет клиента и добавьте секрет с длительностью одного или двух лет.
- При сохранении этой страницы на портале Azure отображается значение секрета. Скопируйте и сохраните значение секрета в безопасном расположении.
- Создайте область действия в вашем приложении на странице Экспонирование API для вашего приложения и нажмите кнопку "Добавить область действия". На портале также может потребоваться создать URI идентификатора приложения.
Это важно
Вам нужен секрет для настройки параметров приложения в вашей реализации. Это значение секрета не отображается снова, и оно не извлекается другими средствами. Запишите его, как только оно отображается на портале Azure.
Регистрация клиентского приложения
- Войдите на портал Azure.
- На верхней панели выберите свою учетную запись пользователя и взгляните на список Каталог, чтобы выбрать арендатора Active Directory для вашего приложения.
- Выберите дополнительные службы на левой панели и выберите Azure Active Directory.
- Выберите Регистрации приложений, а затем Новую регистрацию.
- Введите понятное имя приложения и выберите тип приложения.
- В разделе Поддерживаемые типы учетных записей выберите Accounts in any organizational directory and personal Microsoft accounts (Учетные записи в любом каталоге организации и личные учетные записи Майкрософт).
- Задайте URI перенаправления на базовый URL-адрес.
- Выберите Зарегистрировать, чтобы создать приложение.
- Настройте разрешения для приложения. В разрешениях APIвыберите Добавить разрешение, а затем Мои API.
- Введите имя службы среднего уровня в текстовом поле.
- Выберите Выбрать разрешения и выберите область, созданную на последнем шаге регистрации среднего уровня.
Настройка известных клиентских приложений
В этом сценарии служба среднего уровня должна получить согласие пользователя на доступ к нижестоящему API без взаимодействия с пользователем. Возможность предоставления доступа к нижестоящему API должна быть представлена перед этапом согласия во время проверки подлинности.
Выполните приведенные ниже действия, чтобы явно привязать регистрацию клиентского приложения в Azure AD с регистрацией службы среднего уровня. Эта операция объединяет согласие, требуемое клиентом и средним уровнем, в одном диалоговом окне.
- Перейдите к регистрации службы среднего уровня и выберите Манифест, чтобы открыть редактор манифеста.
- Найдите свойство массива
knownClientApplications
и добавьте идентификатор клиента клиентского приложения в качестве элемента. - Сохраните манифест, выбрав Сохранить.
Запрос токена доступа для взаимодействия между службами
Чтобы запросить маркер доступа, выполните HTTP POST в конечную точку Azure AD для конкретного клиента со следующими параметрами:
https://login.microsoftonline.com/<tenant>/oauth2/token
Клиентское приложение защищено общим секретом или сертификатом.
Первый пример: запрос токена доступа с общим секретом
При использовании общего секрета запрос токена доступа между службами содержит следующие параметры:
Параметр | Тип | Описание |
---|---|---|
тип выдачи | Обязательно | Тип запроса токена. Запрос OBO использует веб-токен JSON (JWT), поэтому значение должно быть urn:ietf:params:oauth:grant-type:jwt-bearer. |
утверждение | Обязательно | Значение токена доступа, используемого в запросе. |
идентификатор клиента | Обязательно | Идентификатор приложения, назначенный вызывающей службе во время регистрации в Azure AD. Чтобы найти идентификатор приложения на портале Azure, выберите Active Directory, выберите каталог и выберите имя приложения. |
секрет_клиента | Обязательно | Ключ, зарегистрированный для вызываемой службы в Azure AD. Это значение должно быть отмечено во время регистрации. |
ресурс | Обязательно | URI идентификатора приложения принимающей службы (защищенный ресурс). Чтобы найти URI идентификатора приложения на портале Azure, выберите Active Directory и выберите каталог. Выберите имя приложения, выберите Все параметры, а затем выберите Свойства. |
запрашиваемое_использование_токена | Обязательно | Указывает, как должен обрабатываться запрос. В потоке on-Behalf-Of значение должно быть on_behalf_of. |
охват | Обязательно | Список областей применения, разделённый пробелами, для запроса токена. Для OpenID Connect необходимо указать область openid. |
Пример
Следующий HTTP POST запрашивает маркер доступа для веб-API https://graph.microsoft.com.
client_id
определяет службу, запрашивающую маркер доступа.
// line breaks for legibility only
POST /oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
&client_id=625391af-c675-43e5-8e44-edd3e30ceb15
&client_secret=0Y1W%2BY3yYb3d9N8vSjvm8WrGzVZaAaHbHHcGbcgG%2BoI%3D
&resource=https%3A%2F%2Fgraph.microsoft.com
&assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCIsImtpZCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCJ9.ewogICJhdWQiOiAiaHR0cHM6Ly9ncmFwaC5taWNyb3NvZnQuY29tIiwKICAiaXNzIjogImh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzI2MDM5Y2NlLTQ4OWQtNDAwMi04MjkzLTViMGM1MTM0ZWFjYi8iLAogICJpYXQiOiAxNDkzNDIzMTY4LAogICJuYmYiOiAxNDkzNDIzMTY4LAogICJleHAiOiAxNDkzNDY2OTUxLAogICJhY3IiOiAiMSIsCiAgImFpbyI6ICJBU1FBMi84REFBQUE1NnZGVmp0WlNjNWdBVWwrY1Z0VFpyM0VvV2NvZEoveWV1S2ZqcTZRdC9NPSIsCiAgImFtciI6IFsKICAgICJwd2QiCiAgXSwKICAiYXBwaWQiOiAiNjI1MzkxYWYtYzY3NS00M2U1LThlNDQtZWRkM2UzMGNlYjE1IiwKICAiYXBwaWRhY3IiOiAiMSIsCiAgImVfZXhwIjogMzAyNjgzLAogICJmYW1pbHlfbmFtZSI6ICJUZXN0IiwKICAiZ2l2ZW5fbmFtZSI6ICJOYXZ5YSIsCiAgImlwYWRkciI6ICIxNjcuMjIwLjEuMTc3IiwKICAibmFtZSI6ICJOYXZ5YSBUZXN0IiwKICAib2lkIjogIjFjZDRiY2FjLWI4MDgtNDIzYS05ZTJmLTgyN2ZiYjFiYjczOSIsCiAgInBsYXRmIjogIjMiLAogICJwdWlkIjogIjEwMDMzRkZGQTEyRUQ3RkUiLAogICJzY3AiOiAiVXNlci5SZWFkIiwKICAic3ViIjogIjNKTUlaSWJlYTc1R2hfWHdDN2ZzX0JDc3kxa1l1ekZKLTUyVm1Zd0JuM3ciLAogICJ0aWQiOiAiMjYwMzljY2UtNDg5ZC00MDAyLTgyOTMtNWIwYzUxMzRlYWNiIiwKICAidW5pcXVlX25hbWUiOiAibmF2eWFAZGRvYmFsaWFub3V0bG9vay5vbm1pY3Jvc29mdC5jb20iLAogICJ1cG4iOiAibmF2eWFAZGRvYmFsaWFub3V0bG9vay5vbm1pY3Jvc29mdC5jb20iLAogICJ1dGkiOiAieEN3ZnpoYS1QMFdKUU9MeENHZ0tBQSIsCiAgInZlciI6ICIxLjAiCn0.cqmUVjfVbqWsxJLUI1Z4FRx1mNQAHP-L0F4EMN09r8FY9bIKeO-0q1eTdP11Nkj_k4BmtaZsTcK_mUygdMqEp9AfyVyA1HYvokcgGCW_Z6DMlVGqlIU4ssEkL9abgl1REHElPhpwBFFBBenOk9iHddD1GddTn6vJbKC3qAaNM5VarjSPu50bVvCrqKNvFixTb5bbdnSz-Qr6n6ACiEimiI1aNOPR2DeKUyWBPaQcU5EAK0ef5IsVJC1yaYDlAcUYIILMDLCD9ebjsy0t9pj_7lvjzUSrbMdSCCdzCqez_MSNxrk1Nu9AecugkBYp3UVUZOIyythVrj6-sVvLZKUutQ
&requested_token_use=on_behalf_of
&scope=openid
Второй случай: запрос токена доступа с сертификатом
Запрос токена доступа от службы к службе с сертификатом содержит следующие параметры:
Параметр | Тип | Описание |
---|---|---|
тип выдачи | Обязательно | Тип запроса токена. Запрос OBO использует маркер доступа JWT, поэтому значение должно быть urn:ietf:params:oauth:grant-type:jwt-bearer. |
утверждение | Обязательно | Значение маркера, используемого в запросе. |
идентификатор клиента | Обязательно | Идентификатор приложения, назначенный вызывающей службе во время регистрации в Azure AD. Чтобы найти идентификатор приложения на портале Azure, выберите Active Directory, выберите каталог и выберите имя приложения. |
тип утверждения клиента | Обязательно | Значение должно быть urn:ietf:params:oauth:client-assertion-type:jwt-bearer |
утверждение_клиента | Обязательно | Веб-токен JSON, который вы создаете и подписываете сертификатом, зарегистрированным в качестве учетных данных для приложения. Ознакомьтесь с сертификационными данными для того чтобы узнать о формате утверждения и способе регистрации вашего сертификата. |
ресурс | Обязательно | URI идентификатора приложения принимающей службы (защищенный ресурс). Чтобы найти URI идентификатора приложения на портале Azure, выберите Active Directory и выберите каталог. Выберите имя приложения, выберите Все параметры, а затем выберите Свойства. |
запрашиваемое_использование_токена | Обязательно | Указывает, как должен обрабатываться запрос. В потоке on-Behalf-Of значение должно быть on_behalf_of. |
охват | Обязательно | Список областей, разделённых пробелами, для запроса токена. Для OpenID Connect необходимо указать область openid. |
Эти параметры почти совпадают с запросом по общему секрету, за исключением того, что client_secret parameter
заменяется двумя параметрами: client_assertion_type
и client_assertion
.
Пример
Следующий HTTP POST запрашивает маркер доступа для веб-API https://graph.microsoft.com с сертификатом.
client_id
определяет службу, запрашивающую маркер доступа.
// line breaks for legibility only
POST /oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
&client_id=625391af-c675-43e5-8e44-edd3e30ceb15
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=eyJhbGciOiJSUzI1NiIsIng1dCI6Imd4OHRHeXN5amNScUtqRlBuZDdSRnd2d1pJMCJ9.eyJ{a lot of characters here}M8U3bSUKKJDEg
&resource=https%3A%2F%2Fgraph.microsoft.com
&assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCIsImtpZCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCJ9.eyJhdWQiOiJodHRwczovL2Rkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tLzE5MjNmODYyLWU2ZGMtNDFhMy04MWRhLTgwMmJhZTAwYWY2ZCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzI2MDM5Y2NlLTQ4OWQtNDAwMi04MjkzLTViMGM1MTM0ZWFjYi8iLCJpYXQiOjE0OTM0MjMxNTIsIm5iZiI6MTQ5MzQyMzE1MiwiZXhwIjoxNDkzNDY2NjUyLCJhY3IiOiIxIiwiYWlvIjoiWTJaZ1lCRFF2aTlVZEc0LzM0L3dpQndqbjhYeVp4YmR1TFhmVE1QeG8yYlN2elgreHBVQSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiJiMzE1MDA3OS03YmViLTQxN2YtYTA2YS0zZmRjNzhjMzI1NDUiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MzAyNDAwLCJmYW1pbHlfbmFtZSI6IlRlc3QiLCJnaXZlbl9uYW1lIjoiTmF2eWEiLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTc3IiwibmFtZSI6Ik5hdnlhIFRlc3QiLCJvaWQiOiIxY2Q0YmNhYy1iODA4LTQyM2EtOWUyZi04MjdmYmIxYmI3MzkiLCJwbGF0ZiI6IjMiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJEVXpYbkdKMDJIUk0zRW5pbDFxdjZCakxTNUllQy0tQ2ZpbzRxS1MzNEc4IiwidGlkIjoiMjYwMzljY2UtNDg5ZC00MDAyLTgyOTMtNWIwYzUxMzRlYWNiIiwidW5pcXVlX25hbWUiOiJuYXZ5YUBkZG9iYWxpYW5vdXRsb29rLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6Im5hdnlhQGRkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tIiwidmVyIjoiMS4wIn0.R-Ke-XO7lK0r5uLwxB8g5CrcPAwRln5SccJCfEjU6IUqpqcjWcDzeDdNOySiVPDU_ZU5knJmzRCF8fcjFtPsaA4R7vdIEbDuOur15FXSvE8FvVSjP_49OH6hBYqoSUAslN3FMfbO6Z8YfCIY4tSOB2I6ahQ_x4ZWFWglC3w5mK-_4iX81bqi95eV4RUKefUuHhQDXtWhrSgIEC0YiluMvA4TnaJdLq_tWXIc4_Tq_KfpkvI004ONKgU7EAMEr1wZ4aDcJV2yf22gQ1sCSig6EGSTmmzDuEPsYiyd4NhidRZJP4HiiQh-hePBQsgcSgYGvz9wC6n57ufYKh2wm_Ti3Q
&requested_token_use=on_behalf_of
&scope=openid
Ответ маркера доступа от службы к службе
Ответ успешного выполнения — это ответ JSON OAuth 2.0 со следующими параметрами:
Параметр | Описание |
---|---|
тип токена | Указывает значение типа токена. Единственным типом, поддерживаемым Azure AD, является носитель . Дополнительные сведения о токенах держателя см. в модели авторизации OAuth 2.0: использование токенов держателя (RFC 6750). |
охват | Область доступа, предоставленная в токене. |
истекает через | Продолжительность действия маркера доступа (в секундах). |
срок действия истекает | Время истечения срока действия маркера доступа. Дата представлена как количество секунд с 1970-01-01T0:01T0:0Z UTC до истечения срока действия. Это значение используется для определения времени существования кэшированных маркеров. |
ресурс | URI идентификатора приложения принимающей службы (защищенный ресурс). |
маркер доступа (access_token) | Запрашиваемый маркер доступа. Вызывающая служба может использовать этот маркер для проверки подлинности в принимающей службе. |
ид_токен | Запрошенный токен идентификатора. Вызывающая служба может использовать этот маркер для проверки удостоверения пользователя и начала сеанса с пользователем. |
токен обновления | Токен обновления для запрошенного токена доступа. Вызывающая служба может использовать этот маркер для запроса другого маркера доступа после истечения срока действия текущего маркера доступа. |
Пример успешного ответа
В следующем примере показан успешный ответ на запрос токена доступа для веб-API https://graph.microsoft.com.
{
"token_type":"Bearer",
"scope":"User.Read",
"expires_in":"43482",
"ext_expires_in":"302683",
"expires_on":"1493466951",
"not_before":"1493423168",
"resource":"https://graph.microsoft.com",
"access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCIsImtpZCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCJ9.eyJhdWQiOiJodHRwczovL2dyYXBoLndpbmRvd3MubmV0IiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvMjYwMzljY2UtNDg5ZC00MDAyLTgyOTMtNWIwYzUxMzRlYWNiLyIsImlhdCI6MTQ5MzQyMzE2OCwibmJmIjoxNDkzNDIzMTY4LCJleHAiOjE0OTM0NjY5NTEsImFjciI6IjEiLCJhaW8iOiJBU1FBMi84REFBQUE1NnZGVmp0WlNjNWdBVWwrY1Z0VFpyM0VvV2NvZEoveWV1S2ZqcTZRdC9NPSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiI2MjUzOTFhZi1jNjc1LTQzZTUtOGU0NC1lZGQzZTMwY2ViMTUiLCJhcHBpZGFjciI6IjEiLCJlX2V4cCI6MzAyNjgzLCJmYW1pbHlfbmFtZSI6IlRlc3QiLCJnaXZlbl9uYW1lIjoiTmF2eWEiLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTc3IiwibmFtZSI6Ik5hdnlhIFRlc3QiLCJvaWQiOiIxY2Q0YmNhYy1iODA4LTQyM2EtOWUyZi04MjdmYmIxYmI3MzkiLCJwbGF0ZiI6IjMiLCJwdWlkIjoiMTAwMzNGRkZBMTJFRDdGRSIsInNjcCI6IlVzZXIuUmVhZCIsInN1YiI6IjNKTUlaSWJlYTc1R2hfWHdDN2ZzX0JDc3kxa1l1ekZKLTUyVm1Zd0JuM3ciLCJ0aWQiOiIyNjAzOWNjZS00ODlkLTQwMDItODI5My01YjBjNTEzNGVhY2IiLCJ1bmlxdWVfbmFtZSI6Im5hdnlhQGRkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tIiwidXBuIjoibmF2eWFAZGRvYmFsaWFub3V0bG9vay5vbm1pY3Jvc29mdC5jb20iLCJ1dGkiOiJ4Q3dmemhhLVAwV0pRT0x4Q0dnS0FBIiwidmVyIjoiMS4wIn0.cqmUVjfVbqWsxJLUI1Z4FRx1mNQAHP-L0F4EMN09r8FY9bIKeO-0q1eTdP11Nkj_k4BmtaZsTcK_mUygdMqEp9AfyVyA1HYvokcgGCW_Z6DMlVGqlIU4ssEkL9abgl1REHElPhpwBFFBBenOk9iHddD1GddTn6vJbKC3qAaNM5VarjSPu50bVvCrqKNvFixTb5bbdnSz-Qr6n6ACiEimiI1aNOPR2DeKUyWBPaQcU5EAK0ef5IsVJC1yaYDlAcUYIILMDLCD9ebjsy0t9pj_7lvjzUSrbMdSCCdzCqez_MSNxrk1Nu9AecugkBYp3UVUZOIyythVrj6-sVvLZKUutQ",
"refresh_token":"AQABAAAAAABnfiG-mA6NTae7CdWW7QfdjKGu9-t1scy_TDEmLi4eLQMjJGt_nAoVu6A4oSu1KsRiz8XyQIPKQxSGfbf2FoSK-hm2K8TYzbJuswYusQpJaHUQnSqEvdaCeFuqXHBv84wjFhuanzF9dQZB_Ng5za9xKlUENrNtlq9XuLNVKzxEyeUM7JyxzdY7JiEphWImwgOYf6II316d0Z6-H3oYsFezf4Xsjz-MOBYEov0P64UaB5nJMvDyApV-NWpgklLASfNoSPGb67Bc02aFRZrm4kLk-xTl6eKE6hSo0XU2z2t70stFJDxvNQobnvNHrAmBaHWPAcC3FGwFnBOojpZB2tzG1gLEbmdROVDp8kHEYAwnRK947Py12fJNKExUdN0njmXrKxNZ_fEM33LHW1Tf4kMX_GvNmbWHtBnIyG0w5emb-b54ef5AwV5_tGUeivTCCysgucEc-S7G8Cz0xNJ_BOiM_4bAv9iFmrm9STkltpz0-Tftg8WKmaJiC0xXj6uTf4ZkX79mJJIuuM7XP4ARIcLpkktyg2Iym9jcZqymRkGH2Rm9sxBwC4eeZXM7M5a7TJ-5CqOdfuE3sBPq40RdEWMFLcrAzFvP0VDR8NKHIrPR1AcUruat9DETmTNJukdlJN3O41nWdZOVoJM-uKN3uz2wQ2Ld1z0Mb9_6YfMox9KTJNzRzcL52r4V_y3kB6ekaOZ9wQ3HxGBQ4zFt-2U0mSszIAA",
"id_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiI2MjUzOTFhZi1jNjc1LTQzZTUtOGU0NC1lZGQzZTMwY2ViMTUiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC8yNjAzOWNjZS00ODlkLTQwMDItODI5My01YjBjNTEzNGVhY2IvIiwiaWF0IjoxNDkzNDIzMTY4LCJuYmYiOjE0OTM0MjMxNjgsImV4cCI6MTQ5MzQ2Njk1MSwiYW1yIjpbInB3ZCJdLCJmYW1pbHlfbmFtZSI6IlRlc3QiLCJnaXZlbl9uYW1lIjoiTmF2eWEiLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTc3IiwibmFtZSI6Ik5hdnlhIFRlc3QiLCJvaWQiOiIxY2Q0YmNhYy1iODA4LTQyM2EtOWUyZi04MjdmYmIxYmI3MzkiLCJwbGF0ZiI6IjMiLCJzdWIiOiJEVXpYbkdKMDJIUk0zRW5pbDFxdjZCakxTNUllQy0tQ2ZpbzRxS1MzNEc4IiwidGlkIjoiMjYwMzljY2UtNDg5ZC00MDAyLTgyOTMtNWIwYzUxMzRlYWNiIiwidW5pcXVlX25hbWUiOiJuYXZ5YUBkZG9iYWxpYW5vdXRsb29rLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6Im5hdnlhQGRkb2JhbGlhbm91dGxvb2sub25taWNyb3NvZnQuY29tIiwidXRpIjoieEN3ZnpoYS1QMFdKUU9MeENHZ0tBQSIsInZlciI6IjEuMCJ9."
}
Пример ответа на ошибку
Конечная точка маркера Azure AD возвращает ответ об ошибке при попытке получить маркер доступа для нижестоящего API, который устанавливается с помощью политики условного доступа (например, многофакторной идентификации). Служба среднего уровня должна сообщить эту ошибку клиентскому приложению, чтобы клиентское приложение обеспечивало взаимодействие с пользователем для выполнения политики Условного доступа.
{
"error":"interaction_required",
"error_description":"AADSTS50079: Due to a configuration change made by your administrator, or because you moved to a new location, you must enroll in multi-factor authentication to access 'bf8d80f9-9098-4972-b203-500f535113b1'.\r\nTrace ID: b72a68c3-0926-4b8e-bc35-3150069c2800\r\nCorrelation ID: 73d656cf-54b1-4eb2-b429-26d8165a52d7\r\nTimestamp: 2017-05-01 22:43:20Z",
"error_codes":[50079],
"timestamp":"2017-05-01 22:43:20Z",
"trace_id":"b72a68c3-0926-4b8e-bc35-3150069c2800",
"correlation_id":"73d656cf-54b1-4eb2-b429-26d8165a52d7",
"claims":"{\"access_token\":{\"polids\":{\"essential\":true,\"values\":[\"9ab03e19-ed42-4168-b6b7-7001fb3e933a\"]}}}"
}
Использование маркера доступа для доступа к защищенному ресурсу
Служба среднего уровня может использовать полученный маркер доступа для выполнения аутентифицированных запросов к нижестоящему веб-API, задав маркер в заголовке Authorization
.
Пример
GET /me?api-version=2013-11-08 HTTP/1.1
Host: graph.microsoft.com
Authorization: Bearer eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw
Утверждения SAML, полученные в процессе потока OAuth2.0 OBO
Некоторые веб-службы на основе OAuth должны получить доступ к другим API веб-службы, которые принимают утверждения SAML в неинтерактивных потоках. Azure Active Directory может предоставить утверждение SAML в ответ на поток On-Behalf-Of, где в качестве целевого ресурса используется веб-служба, основанная на SAML.
Примечание.
Это нестандартное расширение для потока OAuth 2.0 On-Behalf-Of, которое позволяет приложению на основе OAuth2 получать доступ к конечным точкам API веб-службы, использующего токены SAML.
Подсказка
При вызове веб-службы, защищенной SAML, из интерфейсного веб-приложения можно просто вызвать API и инициировать обычный интерактивный поток проверки подлинности с помощью существующего сеанса пользователя. Используйте поток OBO только в том случае, если для вызова между службами требуется токен SAML для предоставления контекста пользователя.
Получение токена SAML с помощью запроса OBO с общим секретом
Запрос от одной службы к другой для получения утверждения SAML содержит следующие параметры:
Параметр | Тип | Описание |
---|---|---|
тип выдачи | Обязательно | Тип запроса токена. Для запроса, использующего JWT, значение должно быть urn:ietf:params:oauth:grant-type:jwt-bearer. |
утверждение | Обязательно | Значение токена доступа, используемого в запросе. |
идентификатор клиента | Обязательно | Идентификатор приложения, назначенный вызывающей службе во время регистрации в Azure AD. Чтобы найти идентификатор приложения на портале Azure, выберите Active Directory, выберите каталог и выберите имя приложения. |
секрет_клиента | Обязательно | Ключ, зарегистрированный для вызываемой службы в Azure AD. Это значение должно быть отмечено во время регистрации. |
ресурс | Обязательно | URI идентификатора приложения принимающей службы (защищенный ресурс). Это ресурс, который будет аудиторией токена SAML. Чтобы найти URI идентификатора приложения на портале Azure, выберите Active Directory и выберите каталог. Выберите имя приложения, выберите Все параметры, а затем выберите Свойства. |
запрашиваемое_использование_токена | Обязательно | Указывает, как должен обрабатываться запрос. В потоке On-Behalf-Of значение должно быть on_behalf_of. |
запрашиваемый_тип_токена | Обязательно | Указывает тип запрошенного токена. Значение может быть urn:ietf:params:oauth:token-type:saml2 или urn:ietf:params:oauth:token-type:saml1 в зависимости от требований доступного ресурса. |
Ответ содержит токен SAML, закодированный в UTF8 и Base64url.
SubjectConfirmationData для утверждения SAML, полученного из вызова OBO: Если целевому приложению требуется значение получателя в SubjectConfirmationData, значение должно быть URL-адресом ответа без подстановочных знаков в конфигурации ресурсного приложения.
Узел SubjectConfirmationData: этот узел не может содержать атрибут InResponseTo, так как он не является частью ответа SAML. Приложение, получающее токен SAML, должно иметь возможность принимать утверждение SAML без атрибута InResponseTo.
согласие: Согласие должно быть предоставлено для получения токена SAML, содержащего данные пользователя в потоке OAuth. Сведения о разрешениях и получении согласия администратора см. в разделе Разрешения и согласие в конечной точке Azure Active Directory версии 1.0.
Ответ с утверждением SAML
Параметр | Описание |
---|---|
тип токена | Указывает значение типа токена. Единственным типом, поддерживаемым Azure AD, является носитель . Дополнительные сведения о токенах см. в Механизме авторизации OAuth 2.0: использование токенов (RFC 6750). |
охват | Область доступа, предоставленная в токене. |
истекает через | Продолжительность действия маркера доступа (в секундах). |
срок действия истекает | Время истечения срока действия маркера доступа. Дата представлена как количество секунд с 1970-01-01T0:01T0:0Z UTC до истечения срока действия. Это значение используется для определения времени существования кэшированных маркеров. |
ресурс | URI идентификатора приложения принимающей службы (защищенный ресурс). |
маркер доступа (access_token) | Параметр, возвращающий утверждение SAML. |
токен обновления | Токен обновления. Вызывающая служба может использовать этот маркер для запроса другого маркера доступа после истечения срока действия текущего утверждения SAML. |
- token_type: Bearer
- истекает через: 3296
- ext_expires_in: 0
- expires_on: 1529627844
- Ресурс:
https://api.contoso.com
- access_token: <утверждения SAML>
- issued_token_type: urn:ietf:params:oauth:token-type:saml2
- refresh_token: <маркер обновления>
Ограничения клиента
Общедоступные клиенты с URL-адресами ответа с подстановочными знаками не могут использовать id_token
для потоков OBO. Однако конфиденциальный клиент по-прежнему может погасить токены доступа, полученные через поток неявного предоставления, даже если общедоступный клиент зарегистрировал подстановочный URI перенаправления.
Дальнейшие действия
Узнайте больше о протоколе OAuth 2.0 и другом способе проверки подлинности между службами, использующими учетные данные клиента: