Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
Начиная с 1 мая 2025 г. Azure AD B2C больше не будет доступен для приобретения для новых клиентов. Дополнительные сведения см. в разделе "Вопросы и ответы".
Замечание
В Azure Active Directory B2C пользовательские политики преимущественно предназначены для выполнения сложных сценариев. В большинстве случаев рекомендуется использовать встроенные потоки пользователей. Ознакомьтесь со статьей Начало работы с настраиваемыми политиками в Azure Active Directory B2C, чтобы узнать о базовом пакете настраиваемых политик, если еще не сделали этого.
Azure Active Directory B2C (Azure AD B2C) обеспечивает поддержку интеграции собственной службы RESTful. Azure AD B2C отправляет данные в службу RESTful в коллекции входных утверждений и получает данные обратно в коллекции выходных утверждений. Дополнительные сведения см. в статье Интеграция обмена утверждениями REST API в настраиваемой политике Azure AD B2C.
Протокол
Атрибуту Name элемента Protocol необходимо присвоить значение Proprietary. Атрибут обработчика должен содержать полное имя сборки обработчика протокола, которая используется Azure AD B2C: Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
В следующем примере показан технический профиль RESTful:
<TechnicalProfile Id="REST-UserMembershipValidator">
<DisplayName>Validate user input data and return loyaltyNumber claim</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
...
Входящие утверждения
Элемент InputClaims содержит список утверждений для отправки в REST API. Вы также можете сопоставить имя утверждения с именем, определенным в REST API. В следующем примере показано сопоставление между политикой и REST API. Утверждение givenName отправляется в REST API как firstName, а фамилия отправляется как lastName. Утверждение электронной почты задано как есть.
<InputClaims>
<InputClaim ClaimTypeReferenceId="email" />
<InputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="firstName" />
<InputClaim ClaimTypeReferenceId="surname" PartnerClaimType="lastName" />
</InputClaims>
Элемент InputClaimsTransformations может содержать коллекцию элементов InputClaimsTransformation , которые используются для изменения входных утверждений или создания новых перед отправкой в REST API.
Отправка полезных данных JSON
Технический профиль REST API позволяет отправлять сложные полезные данные JSON в конечную точку.
Чтобы отправить сложную полезные данные JSON, выполните приведенные далее действия.
- Создайте полезные данные JSON с помощью преобразования утверждений GenerateJson .
- В техническом профиле REST API:
- Добавьте преобразование входных утверждений со ссылкой на преобразование утверждений
GenerateJson. - Задайте для параметра метаданных
SendClaimsInзначениеbody -
ClaimUsedForRequestPayloadЗадайте для параметра метаданных имя утверждения, содержащего полезные данные JSON. - В входном утверждении добавьте ссылку на входное утверждение, содержащее полезные данные JSON.
- Добавьте преобразование входных утверждений со ссылкой на преобразование утверждений
В следующем примере TechnicalProfile отправляется сообщение электронной почты проверки с помощью сторонней службы электронной почты (в данном случае SendGrid).
<TechnicalProfile Id="SendGrid">
<DisplayName>Use SendGrid's email API to send the code to the user</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">https://api.sendgrid.com/v3/mail/send</Item>
<Item Key="AuthenticationType">Bearer</Item>
<Item Key="SendClaimsIn">Body</Item>
<Item Key="ClaimUsedForRequestPayload">sendGridReqBody</Item>
<Item Key="DefaultUserMessageIfRequestFailed">Cannot process your request right now, please try again later.</Item>
</Metadata>
<CryptographicKeys>
<Key Id="BearerAuthenticationToken" StorageReferenceId="B2C_1A_SendGridApiKey" />
</CryptographicKeys>
<InputClaimsTransformations>
<InputClaimsTransformation ReferenceId="GenerateSendGridRequestBody" />
</InputClaimsTransformations>
<InputClaims>
<InputClaim ClaimTypeReferenceId="sendGridReqBody" />
</InputClaims>
</TechnicalProfile>
Исходящие утверждения
Элемент OutputClaims содержит список утверждений, возвращаемых REST API. Возможно, потребуется сопоставить имя утверждения, определенного в политике, с именем, определенным в REST API. Кроме того, можно включить утверждения, которые не возвращаются REST API, если вы задали DefaultValue атрибут.
Элемент OutputClaimsTransformations может содержать коллекцию элементов OutputClaimsTransformation , которые используются для изменения выходных утверждений или создания новых.
В следующем примере показано утверждение, возвращаемое REST API:
- Утверждение MembershipId, сопоставленного с именем утверждения лояльностиNumber.
Технический профиль также возвращает утверждения, которые не возвращаются поставщиком удостоверений:
- Утверждение loyaltyNumberIsNew с заданным значением
trueпо умолчанию.
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="loyaltyNumber" PartnerClaimType="MembershipId" />
<OutputClaim ClaimTypeReferenceId="loyaltyNumberIsNew" DefaultValue="true" />
</OutputClaims>
Метаданные
| Свойство | Обязательно | Описание |
|---|---|---|
| ServiceUrl | Да | URL-адрес конечной точки REST API. |
| Тип аутентификации | Да | Тип проверки подлинности, выполняемой поставщиком утверждений RESTful. Возможные значения: None, , BasicBearer, ClientCertificateили ApiKeyHeader.
|
| AllowInsecureAuthInProduction | нет | Указывает, может ли AuthenticationType быть задано none значение в рабочей среде (DeploymentMode для параметра TrustFrameworkPolicy задано Productionзначение или не указано). Возможные значения: true или false (по умолчанию). |
| SendClaimsIn (ОтправитьClaimsIn) | нет | Указывает, как входные утверждения отправляются поставщику утверждений RESTful. Возможные значения: Body (по умолчанию), FormHeader, Url или QueryString. Это Body значение — входное утверждение, которое отправляется в тексте запроса в формате JSON. Значение Form — это входное утверждение, которое отправляется в тексте запроса в формате значения ключа с разделителями "&ersand". Значением Header является входное утверждение, которое отправляется в заголовке запроса. Значение Url — это входное утверждение, которое отправляется в URL-адресе, например https://api.example.com/{claim1}/{claim2}?{claim3}={claim4}. Имя узла, часть URL-адреса не может содержать утверждения. Значением QueryString является входное утверждение, которое отправляется в строке запроса. Команды HTTP, вызываемые каждым из них, приведены следующим образом:
|
| ClaimsFormat | нет | В настоящее время не используется, можно игнорировать. |
| ClaimUsedForRequestPayload (ClaimUsedForRequestPayload) | нет | Имя строкового утверждения, содержащего полезные данные для отправки в REST API. |
| Режим отладки | нет | Запускает технический профиль в режиме отладки. Возможные значения: true или false (по умолчанию). В режиме отладки REST API может возвращать дополнительные сведения. См. раздел "Возвращаемое сообщение об ошибке ". |
| IncludeClaimResolvingInClaimsHandling | нет | Для входных и выходных утверждений указывает, входит ли разрешение утверждений в технический профиль. Возможные значения: true или false (по умолчанию). Если вы хотите использовать сопоставитель утверждений в техническом профиле, задайте для этого значение true. |
| РешениеJsonPathsInJsonTokens | нет | Указывает, разрешает ли технический профиль пути JSON. Возможные значения: true или false (по умолчанию). Используйте эти метаданные для чтения данных из вложенного элемента JSON. В outputClaim задайте PartnerClaimType для элемента пути JSON, который требуется вывести. Например, firstName.localized или data[0].to[0].email. |
| UseClaimAsBearerToken (UseClaimAsBearerToken) | нет | Имя утверждения, содержащего маркер носителя. |
Обработка ошибок
Следующие метаданные можно использовать для настройки сообщений об ошибках, отображаемых при сбое REST API. Сообщения об ошибках можно локализовать.
| Свойство | Обязательно | Описание |
|---|---|---|
| DefaultUserMessageIfRequestFailed | нет | По умолчанию настраивается сообщение об ошибке для всех исключений REST API. |
| UserMessageIfCircuitOpen (Пользовательское сообщениеIfCircuit) | нет | Сообщение об ошибке, когда REST API недоступен. Если не указано, возвращается значение DefaultUserMessageIfRequestFailed. |
| UserMessageIfDnsResolutionFailed | нет | Сообщение об ошибке исключения разрешения DNS. Если не указано, возвращается значение DefaultUserMessageIfRequestFailed. |
| UserMessageIfRequestTimeout | нет | Сообщение об ошибке при истечении времени ожидания подключения. Если не указано, возвращается значение DefaultUserMessageIfRequestFailed. |
Криптографические ключи
Если задан Noneтип проверки подлинности, элемент CryptographicKeys не используется.
<TechnicalProfile Id="REST-API-SignUp">
<DisplayName>Validate user's input data and return loyaltyNumber claim</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">https://your-app-name.azurewebsites.NET/api/identity/signup</Item>
<Item Key="AuthenticationType">None</Item>
<Item Key="SendClaimsIn">Body</Item>
</Metadata>
</TechnicalProfile>
Если задан Basicтип проверки подлинности, элемент CryptographicKeys содержит следующие атрибуты:
| Свойство | Обязательно | Описание |
|---|---|---|
| БазоваяАутентификацияИмя пользователя | Да | Имя пользователя, используемое для проверки подлинности. |
| БазовыйАутентификацияПароль | Да | Пароль, используемый для проверки подлинности. |
В следующем примере показан технический профиль с базовой проверкой подлинности:
<TechnicalProfile Id="REST-API-SignUp">
<DisplayName>Validate user's input data and return loyaltyNumber claim</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">https://your-app-name.azurewebsites.NET/api/identity/signup</Item>
<Item Key="AuthenticationType">Basic</Item>
<Item Key="SendClaimsIn">Body</Item>
</Metadata>
<CryptographicKeys>
<Key Id="BasicAuthenticationUsername" StorageReferenceId="B2C_1A_B2cRestClientId" />
<Key Id="BasicAuthenticationPassword" StorageReferenceId="B2C_1A_B2cRestClientSecret" />
</CryptographicKeys>
</TechnicalProfile>
Если задан ClientCertificateтип проверки подлинности, элемент CryptographicKeys содержит следующий атрибут:
| Свойство | Обязательно | Описание |
|---|---|---|
| Клиентский сертификат | Да | Сертификат X509 (набор ключей RSA), используемый для проверки подлинности. |
<TechnicalProfile Id="REST-API-SignUp">
<DisplayName>Validate user's input data and return loyaltyNumber claim</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">https://your-app-name.azurewebsites.NET/api/identity/signup</Item>
<Item Key="AuthenticationType">ClientCertificate</Item>
<Item Key="SendClaimsIn">Body</Item>
</Metadata>
<CryptographicKeys>
<Key Id="ClientCertificate" StorageReferenceId="B2C_1A_B2cRestClientCertificate" />
</CryptographicKeys>
</TechnicalProfile>
Если задан Bearerтип проверки подлинности, элемент CryptographicKeys содержит следующий атрибут:
| Свойство | Обязательно | Описание |
|---|---|---|
| Маркер аутентификации носителя | нет | Маркер носителя OAuth 2.0. |
<TechnicalProfile Id="REST-API-SignUp">
<DisplayName>Validate user's input data and return loyaltyNumber claim</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">https://your-app-name.azurewebsites.NET/api/identity/signup</Item>
<Item Key="AuthenticationType">Bearer</Item>
<Item Key="SendClaimsIn">Body</Item>
</Metadata>
<CryptographicKeys>
<Key Id="BearerAuthenticationToken" StorageReferenceId="B2C_1A_B2cRestClientAccessToken" />
</CryptographicKeys>
</TechnicalProfile>
Если задан ApiKeyHeaderтип проверки подлинности, элемент CryptographicKeys содержит следующий атрибут:
| Свойство | Обязательно | Описание |
|---|---|---|
Имя заголовка HTTP, например x-functions-keyили x-api-key. |
Да | Ключ, используемый для проверки подлинности. |
Замечание
В настоящее время Azure AD B2C поддерживает только один заголовок HTTP для проверки подлинности. Если для вызова RESTful требуется несколько заголовков, таких как идентификатор клиента и значение секрета клиента, вам потребуется выполнить прокси-запрос каким-то образом.
<TechnicalProfile Id="REST-API-SignUp">
<DisplayName>Validate user's input data and return loyaltyNumber claim</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">https://your-app-name.azurewebsites.NET/api/identity/signup</Item>
<Item Key="AuthenticationType">ApiKeyHeader</Item>
<Item Key="SendClaimsIn">Body</Item>
</Metadata>
<CryptographicKeys>
<Key Id="x-functions-key" StorageReferenceId="B2C_1A_RestApiKey" />
</CryptographicKeys>
</TechnicalProfile>
Возврат сообщения об ошибке проверки
REST API может потребоваться вернуть сообщение об ошибке, например "Пользователь не найден в системе CRM". Если возникает ошибка, REST API должен вернуть сообщение об ошибке HTTP 4xx, например 400 (неправильный запрос) или код состояния ответа 409 (конфликт). Текст ответа содержит сообщение об ошибке в формате JSON:
{
"version": "1.0.0",
"status": 409,
"code": "API12345",
"requestId": "50f0bd91-2ff4-4b8f-828f-00f170519ddb",
"userMessage": "Message for the user",
"developerMessage": "Verbose description of problem and how to fix it.",
"moreInfo": "https://restapi/error/API12345/moreinfo"
}
| Свойство | Обязательно | Описание |
|---|---|---|
| версия | Да | Версия REST API. Например: 1.0.1 |
| статус | Да | Коды состояния HTTP-ответа, например число, и должно иметь значение 409. Служба REST может возвращать код состояния HTTP 4XX, но значение status , поданное в текст ответа в формате JSON, должно быть 409. |
| код | нет | Код ошибки от поставщика конечной точки RESTful, который отображается при DebugMode включении. |
| идентификатор запроса | нет | Идентификатор запроса от поставщика конечной точки RESTful, который отображается при DebugMode включении. |
| сообщение пользователя | Да | Сообщение об ошибке, отображаемое пользователю. |
| Сообщение разработчика | нет | Подробное описание проблемы и способы ее устранения, которое отображается при DebugMode включении. |
| подробнееИнформация | нет | Универсальный код ресурса (URI), указывающий на дополнительные сведения, отображаемые при DebugMode включении. |
В следующем примере показан класс C#, который возвращает сообщение об ошибке:
public class ResponseContent
{
public string Version { get; set; }
public int Status { get; set; }
public string Code { get; set; }
public string UserMessage { get; set; }
public string DeveloperMessage { get; set; }
public string RequestId { get; set; }
public string MoreInfo { get; set; }
}
Дальнейшие шаги
Примеры использования технического профиля RESTful см. в следующих статьях:
- Интеграция обмена утверждениями REST API в настраиваемой политике Azure AD B2C
- Пошаговое руководство: добавление соединителя API в поток регистрации пользователей
- Пошаговое руководство. Добавление обмена утверждениями REST API в пользовательские политики в Azure Active Directory B2C
- Защита служб REST API