Definir um perfil técnico de erro personalizado OAuth2 em uma política personalizada do Azure Ative Directory B2C

Este artigo descreve como lidar com um erro personalizado OAuth2 com o Azure Ative Directory B2C (Azure AD B2C). Use este perfil técnico se algo de errado na sua política. O perfil técnico retorna o erro para seu aplicativo de terceira parte confiável OAuth2 ou OpenId Connect. Confira a demonstração ao vivo do perfil técnico de erro personalizado do OAuth2.

Para manipular a mensagem de erro OAuth2 personalizada:

  1. Defina um perfil técnico de erro OAuth2.
  2. Defina o código de erro e as declarações de mensagem de erro.
  3. Na jornada do usuário, chame o perfil técnico de erro OAuth2.

Erro OAuth2

O erro é retornado com os seguintes dados:

  • erro - access_denied
  • error_description - A mensagem de erro usando a convenção AAD_Custom_<errorCode>: <errorMessage>.
  • ID de correlação - A ID de correlação do Azure AD B2C.
  • Carimbo de data/hora - O carimbo de data/hora do erro.

O exemplo a seguir demonstra uma mensagem de erro personalizada de retorno ao https://jwt.ms aplicativo:

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

Protocolo

O atributo Name do elemento Protocol precisa ser definido como OAuth2. Defina o elemento OutputTokenFormat como OAuth2Error.

O exemplo a seguir mostra um perfil técnico para 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> -->

Definir a transformação de declarações para gerar valores personalizados de código de erro e mensagem de erro

Use estas etapas para gerar valores personalizados de código de erro e mensagem de erro:

  1. Localize o ClaimsTransformations elemento e, em seguida, adicione o seguinte código dentro dele

    <!--
     <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> -->
    
  2. Adicione as duas transformações de declarações no OutputClaimsTransformations elemento de qualquer perfil técnico antes do técnico Oauth2 que você definir:

        <OutputClaimsTransformations>
          <OutputClaimsTransformation ReferenceId="generateErrorCode" />
          <OutputClaimsTransformation ReferenceId="generateErrorMessage" />
        </OutputClaimsTransformations>
    

Declarações de entrada

O elemento InputClaims contém uma lista de declarações necessárias para retornar o erro OAuth2.

ClaimReferenceId Necessário Description
errorCode Sim O código de erro.
errorMessage Sim A mensagem de erro.

Chaves criptográficas

O elemento CryptographicKeys contém a seguinte chave:

Atributo Necessário Description
issuer_secret Sim Um certificado X509 (conjunto de chaves RSA). Use a chave configurada B2C_1A_TokenSigningKeyContainer em Introdução às políticas personalizadas.

Invoque o perfil técnico

Você pode chamar o perfil técnico de erro OAuth2 a partir de uma jornada do usuário ou subjornada (tipo de transfer). Defina o tipo de etapa de orquestração como SendClaims com uma referência ao seu perfil técnico de erro OAuth2.

Se sua jornada de usuário ou subjornada já tiver outra SendClaims etapa de orquestração, defina o DefaultCpimIssuerTechnicalProfileReferenceId atributo para o perfil técnico do emissor do token.

No exemplo a seguir:

  • A jornada SignUpOrSignIn-Custom do usuário define o perfil JwtIssuertécnico do emissor do DefaultCpimIssuerTechnicalProfileReferenceId token.
  • A oitava etapa de orquestração verifica se ela errorCode existe. Se sim, ligue para o ReturnOAuth2Error perfil técnico para retornar o erro.
  • Se errorCode não existir, a nona etapa de orquestração emitirá o token.
<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>

Opcionalmente, você pode usar pré-condições para manipular o perfil técnico de erro Oauth2. Por exemplo, se não houver nenhuma reivindicação de e-mail, você pode definir para chamar o perfil técnico de erro Oauth2:

<OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="ReturnOAuth2Error">
      <Preconditions>
        <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
          <Value>email</Value>
          <Action>SkipThisOrchestrationStep</Action>
        </Precondition>
      </Preconditions>
    </OrchestrationStep>

Próximos passos

Saiba mais sobre UserJourneys