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


Определение технического профиля OAuth2 в пользовательской политике Azure Active Directory B2C

Это важно

Начиная с 1 мая 2025 г. Azure AD B2C больше не будет доступен для приобретения для новых клиентов. Дополнительные сведения см. в разделе "Вопросы и ответы".

Замечание

В Azure Active Directory B2C пользовательские политики преимущественно предназначены для выполнения сложных сценариев. В большинстве случаев рекомендуется использовать встроенные потоки пользователей. Ознакомьтесь со статьей Начало работы с настраиваемыми политиками в Azure Active Directory B2C, чтобы узнать о базовом пакете настраиваемых политик, если еще не сделали этого.

Azure Active Directory B2C (Azure AD B2C) обеспечивает поддержку поставщика удостоверений протокола OAuth2. OAuth2 — это основной протокол для авторизации и делегированной проверки подлинности. Дополнительные сведения см. в статье RFC 6749 Платформа авторизации OAuth 2.0. С помощью технического профиля OAuth2 вы можете интегрироваться с поставщиком удостоверений на основе OAuth2, например Facebook. Федерация с поставщиком удостоверений позволяет пользователям входить в систему, используя имеющиеся удостоверения социальных сетей или компаний.

Протокол

Атрибуту Name элемента Protocol необходимо присвоить значение OAuth2. Например, протокол технического профиля Facebook-OAUTH:OAuth2

<TechnicalProfile Id="Facebook-OAUTH">
  <DisplayName>Facebook</DisplayName>
  <Protocol Name="OAuth2" />
  ...

Входящие утверждения

Элементы InputClaims и InputClaimsTransformations не являются обязательными. Но вам может потребоваться отправить дополнительные параметры поставщику удостоверений. В следующем примере к запросу авторизации добавляется параметр строки запроса domain_hint со значением contoso.com.

<InputClaims>
  <InputClaim ClaimTypeReferenceId="domain_hint" DefaultValue="contoso.com" />
</InputClaims>

Исходящие утверждения

Элемент OutputClaims содержит список утверждений, возвращаемых поставщиком удостоверений OAuth2. Возможно, потребуется сопоставить имя утверждения, определенное в вашей политике, с именем, определенным у поставщика удостоверений. Кроме того, можно включить утверждения, которые не возвращаются поставщиком удостоверений, если вы задали DefaultValue атрибут.

Элемент OutputClaimsTransformations может содержать коллекцию элементов OutputClaimsTransformation, которые используются для изменения исходящих утверждений или создания новых.

В следующем примере показаны утверждения, возвращаемые поставщиком удостоверений Facebook:

  • Утверждение first_name сопоставлено с заданным именем.
  • Утверждение last_name сопоставляется с утверждением фамилии .
  • Утверждение displayName без сопоставления имен.
  • Утверждение email без ассоциации с именами.

Технический профиль также возвращает утверждения, которые не возвращаются поставщиком удостоверений:

  • Утверждение identityProvider , содержащее имя поставщика удостоверений.
  • Утверждение authenticationSource со значением по умолчанию socialIdpAuthentication.
<OutputClaims>
  <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="id" />
  <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="first_name" />
  <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="last_name" />
  <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
  <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" />
  <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="facebook.com" />
  <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" />
</OutputClaims>

Метаданные конечной точки авторизации

Поток авторизации начинается, когда Azure AD B2C направляет пользователя к конечной точке поставщиков /authorize удостоверений OAuth2. Вызов конечной точки авторизации — это интерактивная часть потока, где пользователь принимает меры. На этом этапе пользователю предлагается завершить вход в поставщик удостоверений OAuth2. Например, введите имя пользователя и пароль.

Azure AD B2C создает запрос авторизации, предоставляя идентификатор клиента, области, URI перенаправления и другие параметры, необходимые для получения маркера доступа от поставщика удостоверений. В этом разделе описаны метаданные конечной точки авторизации, которая позволяет настроить запрос на /authorize конечную точку поставщика удостоверений.

Запрос к конечной точке авторизации всегда является HTTP GET. В следующем примере показан вызов конечной точки авторизации.

GET https://login.contoso.com/oauth/v2/authorization?
client_id=12345
&response_type=code
&response_mode=query
&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob
&scope=profile%20offline_access
&redirect_uri=https%3a%2f%2fabrikam.b2clogin.com%2fabrikam.onmicrosoft.com%2foauth2%2fauthresp
&state=...

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

Свойство Обязательно Описание
authorization_endpoint Да URL-адрес конечной точки авторизации в формате RFC 6749.
client_id Да Идентификатор приложения поставщика идентификационных данных.
AdditionalRequestQueryParameters нет Дополнительные параметры запроса запроса. Например, может потребоваться отправить дополнительные параметры поставщику удостоверений. Можно включить несколько параметров с помощью разделителя запятых.
response_mode нет Метод, который использует поставщик удостоверений, чтобы отправить результат обратно в Azure AD B2C. Возможные значения: query, form_post (по умолчанию) или fragment.
scope нет Область запроса, определенного в соответствии со спецификацией поставщика удостоверений OAuth2. Возможные значения: openid, profile и email.
UsePolicyInRedirectUri нет Указывает, следует ли использовать политику при создании универсального кода ресурса (URI) перенаправления. При настройке приложения в поставщике удостоверений необходимо указать URI перенаправления. URI перенаправления указывает на Azure AD B2C, https://{your-tenant-name}.b2clogin.com/{your-tenant-name}.onmicrosoft.com/oauth2/authresp. Если вы указываете true, необходимо добавить URI перенаправления для каждой используемой политики. Например: https://{your-tenant-name}.b2clogin.com/{your-tenant-name}.onmicrosoft.com/{policy-name}/oauth2/authresp.

Метаданные конечной точки токена

После завершения проверки подлинности пользователя в конечной точке авторизации поставщика удостоверений возвращается ответ, содержащий авторизацию code , в Azure AD B2C. Azure AD B2C активирует код авторизации для маркера доступа, отправив запрос POST в /token конечную точку поставщика удостоверений. В этом разделе описаны метаданные конечной точки маркера, которые позволяют настроить запрос на /token конечную точку поставщика удостоверений.

В следующем HTTP-запросе показан вызов Azure AD B2C к конечной точке маркера поставщика удостоверений.

POST https://contoso/oauth2/token 
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&client_id=12345&scope=profile offline_access&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq... 

В следующей таблице перечислены метаданные конечной точки маркера.

Свойство Обязательно Описание
AccessTokenEndpoint Да URL-адрес конечной точки маркера. Например: https://www.linkedin.com/oauth/v2/accessToken.
HttpBinding нет Ожидаемая привязка HTTP к конечной точке токена. Возможные значения: GET или POST.
AccessTokenResponseFormat нет Формат вызова конечной точки маркера доступа. Например, Для Facebook требуется метод HTTP GET, но ответ маркера доступа находится в формате JSON. Возможные значения: Default, Jsonи JsonP.
ExtraParamsInAccessTokenEndpointResponse нет Содержит дополнительные параметры, которые могут быть возвращены в ответе от AccessTokenEndpoint некоторыми поставщиками удостоверений. Например, ответ из AccessTokenEndpoint содержит дополнительный параметр, например openid, обязательный параметр, помимо access_token в строке запроса запроса ClaimsEndpoint . Несколько имен параметров должны быть экранированы и разделены запятыми "," разделителя.
token_endpoint_auth_method нет Указывает, как Azure AD B2C отправляет заголовок проверки подлинности в конечную точку маркера. Возможные значения: client_secret_post (по умолчанию) и client_secret_basic, private_key_jwt. Дополнительные сведения см. в документе о проверке подлинности клиента OpenID Connect.
token_signing_algorithm нет Указывает алгоритм подписания для использования, когда для параметра token_endpoint_auth_method задано значение private_key_jwt. Возможные значения: RS256 (по умолчанию) или RS512.

Настройка метода привязки HTTP

По умолчанию запрос к конечной точке маркера использует HTTP POST.

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="HttpBinding">POST</Item>

Следующий HTTP-вызов демонстрирует вызов конечной точки токена с помощью HTTP-запроса POST:

POST /oauth2/token

client_id=abcd&client_secret=1234&redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fcontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

Для поставщиков удостоверений, требующих использования метода HTTP GET в конечной точке /token , задайте HttpBinding для метаданных значение GET. Обратите внимание, что в следующем примере AccessTokenResponseFormat задано значение json, так как конечная точка маркера возвращает ответ в формате JSON.

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="HttpBinding">GET</Item>
<Item Key="AccessTokenResponseFormat">json</Item>
GET /oauth2/token?client_id=abcd&client_secret=1234&redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fcontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

Настройка формата ответа маркера доступа

Для поставщиков удостоверений, поддерживающих метод HTTP POST, AccessTokenResponseFormat по умолчанию jsonустанавливается значение . Если поставщик удостоверений поддерживает HTTP-запрос GET, необходимо явно задать формат json ответа маркера доступа.

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="HttpBinding">GET</Item>
<Item Key="AccessTokenResponseFormat">json</Item>

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

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...",
    "token_type": "Bearer",
    "not_before": 1637924390,
    "expires_in": 960000,
}

Настройка метода проверки подлинности

Запросы к конечной точке токена всегда требуют проверки подлинности. По умолчанию Azure AD B2C предоставляет поставщику удостоверений учетные данные клиента. По умолчанию используется client_secret_postметод проверки подлинности, включая учетные данные клиента (client_id и client_secret) в тексте запроса.

Следующий HTTP-запрос к конечной точке токена client_id содержит и client_secret в данных POST. Для запросов client_id GET и client_secret их включения в параметры строки запроса.

POST /oauth2/token

client_id=abcd&client_secret=1234&redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fcontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

Для поставщиков удостоверений, которым требуется использовать обычную проверку подлинности HTTP в конечной /token точке, настройте метаданные token_endpoint_auth_methodclient_secret_basicв . С помощью этого типа метода проверки подлинности учетные данные клиента передаются поставщику удостоверений с помощью схемы проверки подлинности HTTP Basic.

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="token_endpoint_auth_method">client_secret_basic</Item>

Следующий HTTP-запрос демонстрирует вызов конечной точки токена с помощью базовой проверки подлинности HTTP. Заголовок авторизации содержит идентификатор клиента и секрет клиента в формате client_ID:client_secretbase64.

POST /oauth2/token

Authorization: Basic YWJjZDoxMjM0

redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

Для поставщиков удостоверений, поддерживающих проверку подлинности JWT с закрытым ключом, настройте метаданные token_endpoint_auth_methodв private_key_jwt . С помощью этого типа метода проверки подлинности сертификат, предоставленный Azure AD B2C, используется для создания подписанного утверждения, который передается поставщику удостоверений через client_assertion параметр. Задано client_assertion_typeurn:ietf:params:oauth:client-assertion-type:jwt-bearerзначение . Метаданные token_signing_algorithm указывают алгоритм подписывания JWT.

<Item Key="AccessTokenEndpoint">https://contoso.com/oauth2/token</Item>
<Item Key="token_endpoint_auth_method">private_key_jwt</Item>
<Item Key="token_signing_algorithm">RS256</Item>

Следующий HTTP-запрос демонстрирует вызов конечной точки токена с помощью проверки подлинности JWT закрытого ключа.

POST /oauth2/token

client_assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImtpZCI6IjJFRFg0dWRYeDIxbXNoaXdJVzczMUY3OUZSbFJiUDZXVXJyZmktR1RFeVkifQ.eyJpc3MiOiJhYmNkIiwiZXhwIjoxNjM3OTI5ODY0LCJuYmYiOjE2Mzc5Mjk1NjQsImF1ZCI6Imh0dHBzOi8vNWRlNC0xMDktNjQtMTI0LTUzLm5ncm9rLmlvL2FjY2Vzc190b2tlbiIsImp0aSI6IjVxQWlGV2lEODNDbU1KWWNrejBRdGc9PSIsInN1YiI6ImFiY2QiLCJpYXQiOjE2Mzc5Mjk1NjR9.C4OtRnrLaQatpT5LP45O5Nb418S4v8yZi_C42ld440w&client_id=abcd&client_assertion_type=urn%3aietf%3aparams%3aoauth%3aclient-assertion-type%3ajwt-bearer&redirect_uri=https%3a%2f%2fcontoso.b2clogin.com%2fcontoso.onmicrosoft.com%2foauth2%2fauthresp&code=12345&grant_type=authorization_code

Метаданные конечной точки сведений пользователя

После того как Azure AD B2C получает маркер доступа от поставщика удостоверений OAuth2, он вызывает конечную точку сведений пользователя. Конечная точка сведений о пользователе, также известная как конечная точка утверждений, предназначена для получения утверждений о прошедшем проверку подлинности пользователя. Azure AD B2C использует проверку подлинности маркера носителя для проверки подлинности в конечной точке сведений о пользователях поставщиков удостоверений. Маркер носителя — это маркер доступа, полученный Azure AD B2C из конечной точки поставщиков /token удостоверений.

Запрос к конечной точке сведений пользователя всегда является HTTP GET. Маркер доступа отправляется в параметре строки запроса с именем access_token. Следующий HTTP-запрос показывает вызов конечной точки сведений пользователя с маркером доступа в параметре строки запроса.

GET /oauth2/claims?access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5... 

В следующей таблице перечислены метаданные конечной точки сведений пользователя.

Свойство Обязательно Описание
ClaimsEndpoint Да URL-адрес конечной точки сведений пользователя. Например: https://api.linkedin.com/v2/me.
ClaimsEndpointAccessTokenName нет Имя параметра строки запроса маркера доступа. Значение по умолчанию: access_token.
ClaimsEndpointFormatName нет Имя параметра строки запроса формата. Например, можно задать имя как format в этой конечной точке https://api.linkedin.com/v1/people/~?format=jsonутверждений LinkedIn.
ClaimsEndpointFormat нет Значение параметра строки запроса формата. Например, можно задать значение в json этой конечной точке https://api.linkedin.com/v1/people/~?format=jsonутверждений LinkedIn.
BearerTokenTransmissionMethod нет Указывает способ отправки маркера. Метод по умолчанию — это строка запроса. Чтобы отправить маркер в качестве заголовка запроса, задайте для параметра ./>
ExtraParamsInClaimsEndpointRequest нет Содержит дополнительные параметры, которые могут быть возвращены в запросе ClaimsEndpoint некоторыми поставщиками удостоверений. Несколько имен параметров должны быть экранированы и разделены запятыми "," разделителя.

Настройка параметра строки запроса маркера доступа

Конечная точка сведений пользователя может потребовать отправки маркера доступа в определенном параметре строки запроса. Чтобы изменить имя параметра строки запроса, содержащего маркер доступа, используйте метаданные ClaimsEndpointAccessTokenName . В следующем примере для параметра строки запроса маркера доступа задано значение token.

<Item Key="ClaimsEndpoint">https://contoso.com/oauth2/claims</Item>
<Item Key="ClaimsEndpointAccessTokenName">token</Item>

Следующий HTTP-вызов демонстрирует вызов конечной точки сведений пользователя с ClaimsEndpointAccessTokenName заданным значением token:

GET /oauth2/claims?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...

Настройка формата утверждений

ClaimsEndpointFormatName И ClaimsEndpointFormat позволяет отправлять параметр строки запроса пары "ключ-значение" в конечную точку сведений пользователя. В следующем примере настраивается параметр строки запроса с именем formatсо значением json.

<Item Key="ClaimsEndpoint">https://contoso.com/oauth2/claims</Item>
<Item Key="ClaimsEndpointFormatName">format</Item>
<Item Key="ClaimsEndpointFormat">json</Item>

Следующий HTTP-запрос демонстрирует вызов конечной точки сведений пользователя и ClaimsEndpointFormatNameClaimsEndpointFormat настроен.

GET /oauth2/claims?format=json&access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...

Настройка метода передачи маркеров носителя

По умолчанию маркер доступа отправляется в конечную точку сведений о пользователях поставщиков удостоверений через параметр строки запроса. Чтобы отправить маркер в заголовке HTTP Authorization , задайте BearerTokenTransmissionMethod для метаданных значение AuthorizationHeader.

<Item Key="ClaimsEndpoint">https://contoso.com/oauth2/claims</Item>
<Item Key="BearerTokenTransmissionMethod">AuthorizationHeader</Item>

Следующий HTTP-запрос демонстрирует, как передается маркер доступа, если BearerTokenTransmissionMethod задано AuthorizationHeaderзначение .

GET /oauth2/claims

Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...

Передача параметров, возвращаемых конечной точкой маркера

Некоторые поставщики удостоверений требуют передачи дополнительных параметров, возвращаемых из конечной точки маркера в конечную точку сведений пользователя. Например, ответ от конечной точки токена содержит параметр с именем resource, который является обязательным параметром конечной точки сведений пользователя (помимо маркера доступа). Используйте метаданные ExtraParamsInClaimsEndpointRequest , чтобы указать все дополнительные параметры для передачи. Несколько имен параметров должны быть экранированы и разделены запятыми "," разделителя.

Следующий код JSON демонстрирует полезные данные JSON, возвращаемые конечной точкой маркера с именем resourceпараметра.

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...",
    "token_type": "Bearer",
    "not_before": 1549647431,
    "expires_in": 960000,
    "resource": "f2a76e08-93f2-4350-833c-965c02483b11"
}

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

<Item Key="ExtraParamsInClaimsEndpointRequest">resource</Item>

Следующий HTTP-запрос демонстрирует, resource как параметр передается в конечную точку сведений о пользователе.

GET /oauth2/claims?resource=f2a76e08-93f2-4350-833c-965c02483b11&access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5...

Конечная точка сеанса

Чтобы выйти из приложения, перенаправьте пользователя в конечную точку выхода Azure AD B2C (для OAuth2 и OpenID Connect) или отправьте ( LogoutRequest для SAML). Azure AD B2C очищает сеанс пользователя из браузера. При запросе на выход Azure AD B2C пытается выйти из любых федеративных поставщиков удостоверений, через которые пользователь мог войти. URI выхода поставщика удостоверений OAuth2 настраивается в end_session_endpoint метаданных. Когда пользователь выходит из приложения через Azure AD B2C, будет создан скрытый iframe, который будет вызываться end_session_endpoint на странице выхода Azure AD B2C.

В следующей таблице перечислены метаданные конечной точки сведений пользователя.

Свойство Обязательно Описание
end_session_endpoint Да URL-адрес конечной конечной точки сеанса в формате RFC 6749.
SingleLogoutEnabled нет Указывает, будет ли технический профиль при входе пытаться выйти из федеративных поставщиков удостоверений. Дополнительные сведения см. в разделе Выход из сеанса Azure AD B2C. Возможные значения: true (по умолчанию) и false.

Универсальные метаданные OAuth2

В следующей таблице перечислены универсальные метаданные поставщика удостоверений OAuth2. Метаданные описывают, как технический профиль OAuth2 обрабатывает проверку маркеров, получает утверждения и реагирует на сообщения об ошибках.

Свойство Обязательно Описание
IdTokenAudience нет Аудитория id_token. Если задано, Azure AD B2C проверяет, находится ли маркер в утверждении, возвращенном поставщиком удостоверений, и равен ли он указанному.
ProviderName нет Имя поставщика удостоверений.
ResponseErrorCodeParamName нет Имя параметра, содержащего сообщение об ошибке, возвращаемое по протоколу HTTP 200 (ОК).
IncludeClaimResolvingInClaimsHandling   нет Для входящих и исходящих утверждений указывает, включено ли разрешение утверждений в технический профиль. Возможные значения: true или false (по умолчанию). Если вы хотите использовать сопоставитель утверждений в техническом профиле, задайте для этого параметра значение true.
ResolveJsonPathsInJsonTokens нет Указывает, разрешает ли технический профиль пути JSON. Возможные значения: true или false (по умолчанию). Используйте эти метаданные для чтения данных из вложенного элемента JSON. В outputClaim задайте PartnerClaimType для элемента пути JSON, который требуется вывести. Например, firstName.localized или data[0].to[0].email.

Криптографические ключи

Элемент CryptographicKeys содержит следующий атрибут:

Свойство Обязательно Описание
client_secret Да Секрет клиента приложения поставщика удостоверений. Криптографический ключ требуется только в том случае, если для response_types заданы codeметаданные. В этом случае Azure AD B2C выполняет другой вызов для обмена кода авторизации на маркер доступа. Если для метаданных задано id_tokenзначение, можно опустить криптографический ключ.
assertion_signing_key нет token_endpoint_auth_method Если для метаданных задано private_key_jwtзначение, предоставьте сертификат X509 для подписи ключа JWT. Этот ключ должен быть предоставлен поставщиком удостоверений OAuth2.

Перенаправляющий URI

При настройке URI перенаправления поставщика удостоверений введите https://{tenant-name}.b2clogin.com/{tenant-name}.onmicrosoft.com/oauth2/authresp. Обязательно замените {tenant-name} имя клиента (например, contosob2c). URI перенаправления должен содержать только строчные символы.