Определение технического профиля пользовательской ошибки OAuth2 в настраиваемой политике в Azure Active Directory B2C
Эта статья описывает, как обрабатывать пользовательскую ошибку OAuth2 с помощью Azure Active Directory B2C (Azure AD B2C). Используйте этот технический профиль, если в вашей политике нарушится какая-либо логика. Технический профиль возвращает ошибку в приложение проверяющей стороны OAuth2 или OpenID Connect. Ознакомьтесь с демонстрацией технического профиля настраиваемой ошибки OAuth2.
Чтобы обработать пользовательское сообщение об ошибке OAuth2, сделайте следующее.
- Определите технический профиль ошибки OAuth2.
- Задайте код ошибки и утверждения сообщения об ошибке.
- Из пути взаимодействия пользователя вызовите технический профиль ошибки OAuth2.
Ошибка OAuth2
Ошибка возвращается со следующими данными:
- error -
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> -->
Входящие утверждения
Элемент InputClaims содержит список утверждений, необходимых для возврата ошибки OAuth2.
ClaimReferenceId | Обязательно | Описание |
---|---|---|
errorCode | Да | Код ошибки. |
errorMessage | Да | Сообщение об ошибке. |
Криптографические ключи
Элемент CryptographicKeys содержит следующий ключ:
attribute | Обязательно | Описание |
---|---|---|
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>
Дальнейшие действия
Дополнительные сведения о UserJourneys