Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
Начиная с 1 мая 2025 г. Azure AD B2C больше не будет доступен для приобретения для новых клиентов. Дополнительные сведения см. в разделе "Вопросы и ответы".
Эта статья описывает, как обрабатывать пользовательскую ошибку OAuth2 с помощью Azure Active Directory B2C (Azure AD B2C). Используйте этот технический профиль, если в вашей политике нарушится какая-либо логика. Технический профиль возвращает ошибку в приложение проверяющей стороны OAuth2 или OpenID Connect. Ознакомьтесь с демонстрацией технического профиля настраиваемой ошибки OAuth2.
Чтобы обработать пользовательское сообщение об ошибке OAuth2, сделайте следующее.
- Определите технический профиль ошибки OAuth2.
- Задайте код ошибки и утверждения сообщения об ошибке.
- Из пути взаимодействия пользователя вызовите технический профиль ошибки OAuth2.
Ошибка OAuth2
Ошибка возвращается со следующими данными:
-
ошибка -
access_denied -
error_description — сообщение об ошибке, использующее соглашение
AAD_Custom_<errorCode>: <errorMessage>. - Correlation ID — идентификатор корреляции Azure AD B2C.
- Timestamp — метка времени ошибки.
В следующем примере показано, как пользовательское сообщение об ошибке возвращается в приложение https://jwt.ms.
https://jwt.ms/#error=access_denied&error_description=AAD_Custom_1234%3a+My+custom+error+message%0d%0aCorrelation+ID%3a+233bf9bd-747a-4800-9062-6236f3f69a47%0d%0aTimestamp%3a+2021-03-25+14%3a01%3a23Z%0d%0a
Протокол
Атрибуту Name элемента Protocol необходимо присвоить значение OAuth2. Для элемента OutputTokenFormat задайте значение OAuth2Error.
В следующем примере показан технический профиль для ReturnOAuth2Error:
<!--
<ClaimsProviders> -->
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="ReturnOAuth2Error">
<DisplayName>Return OAuth2 error</DisplayName>
<Protocol Name="OAuth2" />
<OutputTokenFormat>OAuth2Error</OutputTokenFormat>
<CryptographicKeys>
<Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
</CryptographicKeys>
<InputClaims>
<InputClaim ClaimTypeReferenceId="errorCode" />
<InputClaim ClaimTypeReferenceId="errorMessage" />
</InputClaims>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
<!--
</ClaimsProviders> -->
Определение преобразования утверждений для создания пользовательских значений кода ошибки и сообщения об ошибке
Чтобы создать пользовательские значения кода ошибки и сообщения об ошибке, выполните следующие действия.
ClaimsTransformationsНайдите элемент, а затем добавьте в него следующий код.<!-- <ClaimsTransformations> --> <ClaimsTransformation Id="GenerateErrorCode" TransformationMethod="CreateStringClaim"> <InputParameters> <InputParameter Id="value" DataType="string" Value="Error_001" /> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="errorCode" TransformationClaimType="createdClaim" /> </OutputClaims> </ClaimsTransformation> <ClaimsTransformation Id="GenerateErrorMessage" TransformationMethod="CreateStringClaim"> <InputParameters> <InputParameter Id="value" DataType="string" Value="Insert error description." /> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="errorMessage" TransformationClaimType="createdClaim" /> </OutputClaims> </ClaimsTransformation> <!-- </ClaimsTransformations> -->Добавьте два преобразования утверждений в
OutputClaimsTransformationsэлемент любого технического профиля перед определением технического профиля OAuth2:<OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="generateErrorCode" /> <OutputClaimsTransformation ReferenceId="generateErrorMessage" /> </OutputClaimsTransformations>
Входящие утверждения
Элемент InputClaims содержит список утверждений, необходимых для возврата ошибки OAuth2.
| ClaimReferenceId (Идентификатор ссылки) | Обязательное поле | Описание |
|---|---|---|
| Код ошибки | Да | Код ошибки. |
| сообщение об ошибке | Да | Сообщение об ошибке. |
Криптографические ключи
Элемент CryptographicKeys содержит следующий ключ:
| Атрибут | Обязательное поле | Описание |
|---|---|---|
| issuer_secret | Да | Сертификат X509 (ключ RSA задан). Используйте ключ B2C_1A_TokenSigningKeyContainer, настроенный в разделе Начало работы с настраиваемыми политиками. |
Вызов технического профиля
Вы можете вызвать технический профиль ошибки OAuth2 из пути взаимодействия пользователя или из промежуточного пути (тип transfer). Задайте для типа шага оркестрации значение SendClaims со ссылкой на технический профиль ошибки OAuth2.
Если в пути взаимодействия пользователя или промежуточном пути уже есть другой шаг оркестрации SendClaims, присвойте атрибут DefaultCpimIssuerTechnicalProfileReferenceId техническому профилю издателя токенов.
В следующем примере :
- Путь взаимодействия пользователя
SignUpOrSignIn-Customзадает дляDefaultCpimIssuerTechnicalProfileReferenceIdтехнический профиль издателя токеновJwtIssuer. - Восьмой шаг оркестрации проверяет, существует ли
errorCode. Если это так, вызовите технический профильReturnOAuth2Error, чтобы возвратить ошибку. - Если
errorCodeне существует, то девятый шаг оркестрации выдает токен.
<UserJourney Id="SignUpOrSignIn-Custom" DefaultCpimIssuerTechnicalProfileReferenceId="JwtIssuer">
<OrchestrationSteps>
...
<OrchestrationStep Order="8" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="ReturnOAuth2Error">
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="false">
<Value>errorCode</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
</OrchestrationStep>
<OrchestrationStep Order="9" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
</OrchestrationSteps>
<ClientDefinition ReferenceId="DefaultWeb" />
</UserJourney>
При необходимости можно использовать предварительные условия для управления техническим профилем ошибки OAuth2. Например, если нет утверждения электронной почты, можно задать для вызова технического профиля ошибки OAuth2:
<OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="ReturnOAuth2Error">
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="false">
<Value>email</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
</OrchestrationStep>
Следующие шаги
Дополнительные сведения о UserJourneys