Compartilhar via


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

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:

  • error - 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.

ClaimReferenceId Obrigató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 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