Поделиться через


Служба вызовов служб с использованием учетных данных клиента (общий секрет или сертификат)

Предупреждение

Это содержимое предназначено для более старой конечной точки Azure AD версии 1.0. Используйте платформу удостоверений Майкрософт для новых проектов.

Поток предоставления учетных данных клиента OAuth 2.0 позволяет веб-службе (конфиденциальному клиенту) использовать собственные учетные данные вместо олицетворения пользователя для проверки подлинности при вызове другой веб-службы. В этом сценарии клиент обычно является веб-службой среднего уровня, службой управляющей программы или веб-сайтом. Для более высокого уровня гарантии Azure AD также позволяет вызывающей службе использовать сертификат (вместо общего секрета) в качестве учетных данных.

Схема потока предоставления учетных данных клиента

На следующей схеме объясняется, как работает поток предоставления учетных данных клиента в Azure Active Directory (Azure AD).

Поток предоставления учетных данных клиента OAuth2.0

  1. Клиентское приложение проходит проверку подлинности в конечной точке выдачи маркера Azure AD и запрашивает маркер доступа.
  2. Конечная точка выдачи маркера Azure AD выдает маркер доступа.
  3. Маркер доступа используется для проверки подлинности в защищенном ресурсе.
  4. Данные из защищенного ресурса возвращаются клиентскому приложению.

Регистрация служб в Azure AD

Зарегистрируйте как вызывающую службу, так и приемную службу в Azure Active Directory (Azure AD). Подробные инструкции см. в разделе "Интеграция приложений с Azure Active Directory".

Запрос маркера доступа

Чтобы запросить маркер доступа, используйте HTTP POST для конечной точки Azure AD для конкретной клиента.

https://login.microsoftonline.com/<tenant id>/oauth2/token

Запрос токена доступа для взаимодействия между службами

Существует два случая в зависимости от того, будет ли клиентское приложение защищаться общим секретом или сертификатом.

Первый случай: запрос токена доступа с общим секретным ключом

При использовании общего секрета запрос токена доступа между службами содержит следующие параметры:

Параметр Тип Описание
тип предоставления Обязательно Указывает запрошенный тип предоставления. В потоке предоставления учетных данных клиента значение должно быть client_credentials.
идентификатор клиента Обязательно Указывает идентификатор клиента Azure AD для вызываемой веб-службы. Чтобы найти идентификатор клиента вызывающего приложения, на портале Azure щелкните Azure Active Directory, щелкните регистрации приложений, щелкните приложение. Client_id — это идентификатор приложения
секрет_клиента Обязательно Введите ключ, зарегистрированный для вызывающего веб-службы или приложения управляющей программы в Azure AD. Чтобы создать ключ, на портале Azure щелкните Azure Active Directory, щелкните регистрацию приложений, щелкните приложение, щелкните "Параметры", щелкните "Ключи" и добавьте ключ. Закодируйте этот секрет в формате URL при его отправке.
ресурс Обязательно Введите URI идентификатора приложения принимающей веб-службы. Чтобы найти универсальный код ресурса (URI) идентификатора приложения, на портале Azure щелкните Azure Active Directory, щелкните регистрацию приложений, щелкните приложение службы и выберите пункт "Параметры " и "Свойства".

Пример

Следующий HTTP POST запрашивает маркер доступа для https://service.contoso.com/ веб-службы. Элемент client_id определяет веб-службу, которая запрашивает токен доступа.

POST /contoso.com/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id=625bc9f6-3bf6-4b6d-94ba-e97cf07a22de&client_secret=qkDwDJlDfig2IpeuUZYKH1Wb8q1V0ju6sILxQQqhJ+s=&resource=https%3A%2F%2Fservice.contoso.com%2F

Второй случай: запрос токена доступа с сертификатом

Запрос токена доступа от службы к службе с сертификатом содержит следующие параметры:

Параметр Тип Описание
тип предоставления Обязательно Указывает запрошенный тип ответа. В потоке предоставления учетных данных клиента значение должно быть client_credentials.
идентификатор клиента Обязательно Указывает идентификатор клиента Azure AD для вызываемой веб-службы. Чтобы найти идентификатор клиента вызывающего приложения, на портале Azure щелкните Azure Active Directory, щелкните регистрации приложений, щелкните приложение. Client_id — это идентификатор приложения
тип утверждения клиента Обязательно Значение должно быть urn:ietf:params:oauth:client-assertion-type:jwt-bearer
утверждение клиента Обязательно Утверждение (веб-токен JSON), которое необходимо создать и подписать с помощью сертификата, зарегистрированного в качестве учетных данных для приложения. Ознакомьтесь с информацией об учетных данных сертификата, чтобы узнать, как зарегистрировать сертификат и задать формат утверждения.
ресурс Обязательно Введите URI идентификатора приложения принимающей веб-службы. Чтобы найти универсальный код ресурса (URI) идентификатора приложения, на портале Azure щелкните Azure Active Directory, щелкните регистрацию приложений, щелкните приложение службы и выберите пункт "Параметры " и "Свойства".

Обратите внимание, что параметры почти те же, что и в случае запроса по общему секрету, за исключением того, что параметр client_secret заменяется двумя параметрами: client_assertion_type и client_assertion.

Пример

Следующий HTTP POST запрашивает маркер доступа для https://service.contoso.com/ веб-службы с сертификатом. Элемент client_id идентифицирует веб-службу, запрашивающую токен доступа.

POST /<tenant_id>/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

resource=https%3A%2F%contoso.onmicrosoft.com%2Ffc7664b4-cdd6-43e1-9365-c2e1c4e1b3bf&client_id=97e0a5b7-d745-40b6-94fe-5f77d35c6e05&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

Ответ токена доступа между службами

Ответ успешного выполнения содержит ответ JSON OAuth 2.0 со следующими параметрами:

Параметр Описание
маркер доступа (access_token) Запрашиваемый маркер доступа. Вызывающая веб-служба может использовать этот маркер для проверки подлинности в принимающей веб-службе.
тип токена Указывает значение типа токена. Единственным типом, поддерживаемым Azure AD, является носитель . Дополнительные сведения о маркерах носителя см. в статье "Платформа авторизации OAuth 2.0: использование маркера носителя (RFC 6750)".
срок действия истечет через Срок действия токена доступа (в секундах).
срок действия истекает Время истечения срока действия маркера доступа. Дата представлена как количество секунд с 1970-01-01T0:01T0:0Z UTC до истечения срока действия. Это значение используется для определения времени существования кэшированных маркеров.
не ранее Время, с которого маркер доступа становится доступным для использования. Дата представлена как количество секунд с 1970-01-01T0:01T0:0Z UTC до времени действия маркера.
ресурс URI идентификатора приложения принимающей веб-службы.

Пример ответа

В следующем примере показан ответ на успешное выполнение запроса маркера доступа к веб-службе.

{
"access_token":"eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw",
"token_type":"Bearer",
"expires_in":"3599",
"expires_on":"1388452167",
"resource":"https://service.contoso.com/"
}

Использование маркера доступа для доступа к защищенному ресурсу

Служба может использовать полученный маркер доступа для выполнения аутентифицированных запросов к нижестоящему веб-API, задав маркер в заголовке Authorization .

Пример

GET /me?api-version=2013-11-08 HTTP/1.1
Host: graph.microsoft.com
Authorization: Bearer eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw

См. также