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

Эта статья описывает, как обрабатывать пользовательскую ошибку OAuth2 с помощью Azure Active Directory B2C (Azure AD B2C). Используйте этот технический профиль, если в вашей политике нарушится какая-либо логика. Технический профиль возвращает ошибку в приложение проверяющей стороны OAuth2 или OpenID Connect. Ознакомьтесь с демонстрацией технического профиля настраиваемой ошибки OAuth2.

Чтобы обработать пользовательское сообщение об ошибке OAuth2, сделайте следующее.

  1. Определите технический профиль ошибки OAuth2.
  2. Задайте код ошибки и утверждения сообщения об ошибке.
  3. Из пути взаимодействия пользователя вызовите технический профиль ошибки 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