Compartilhar via


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

Importante

A partir de 1º de maio de 2025, o Azure AD B2C não estará mais disponível para compra para novos clientes. Saiba mais em nossas perguntas frequentes.

Este artigo descreve como tratar um erro personalizado do OAuth2 com o Azure AD B2C (Azure Active Directory B2C). Use esse perfil técnico se algo lógico der errado na sua política. O perfil técnico retorna um erro para o 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 tratar a mensagem de erro do OAuth2 personalizada:

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

Erro do OAuth2

O erro é retornar 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 seguinte exemplo demonstra um retorno de mensagem de erro personalizado para o aplicativo 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

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 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 elemento de qualquer perfil técnico antes do OutputClaimsTransformations 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.

ReivindicaçãoReferênciaId Obrigatório Descrição
código de erro Sim O código de erro.
mensagem de erro Sim A mensagem de erro.

Chaves criptográficas

O elemento CryptographicKeys contém a seguinte chave:

Atributo Obrigatório Descrição
issuer_secret Sim Um certificado X509 (conjunto de chaves RSA). Use a chave B2C_1A_TokenSigningKeyContainer que você configurou em Introdução às políticas personalizadas.

Invocar o perfil técnico

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

Se o percurso do usuário ou o sub-percurso já tiver outra etapa de orquestração SendClaims, defina o atributo DefaultCpimIssuerTechnicalProfileReferenceId como o perfil técnico do emissor do token.

No exemplo a seguir:

  • O percurso do usuário SignUpOrSignIn-Custom define o DefaultCpimIssuerTechnicalProfileReferenceId para o perfil técnico do emissor do token JwtIssuer.
  • A oitava etapa de orquestração verifica se o errorCode existe. Se sim, chame o perfil técnico ReturnOAuth2Error 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ê poderá 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óximas etapas

Saiba mais sobre UserJourneys