Share via


Definir um perfil técnico de erro personalizado OAuth2 numa política personalizada do Azure Active Directory B2C

Este artigo descreve como lidar com um erro personalizado OAuth2 com o Azure Active Directory B2C (Azure AD B2C). Utilize este perfil técnico se algo de lógica correr mal na sua política. O perfil técnico devolve o erro à sua aplicação confiadora OAuth2 ou OpenId Connect. Veja a demonstração em direto do perfil técnico de erro personalizado OAuth2.

Para processar a mensagem de erro OAuth2 personalizada:

  1. Defina um perfil técnico de erro OAuth2.
  2. Defina o código de erro e as afirmações de mensagens de erro.
  3. A partir do percurso do utilizador, chame o perfil técnico de erro OAuth2.

Erro OAuth2

O erro é devolvido com os seguintes dados:

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

O exemplo seguinte demonstra uma mensagem de erro personalizada que regressa à aplicação 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 Nome do elemento Protocolo tem de ser definido como OAuth2. Defina o elemento OutputTokenFormat como OAuth2Error.

O exemplo seguinte 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> -->

Afirmações de entrada

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

ClaimReferenceId Necessário Descrição
errorCode Yes O código de erro.
errorMessage Yes A mensagem de erro.

Teclas criptográficas

O elemento CryptographicKeys contém a seguinte chave:

Atributo Necessário Descrição
issuer_secret Yes Um certificado X509 (conjunto de chaves RSA). Utilize a B2C_1A_TokenSigningKeyContainer chave que configura em Introdução às políticas personalizadas.

Invocar o perfil técnico

Pode chamar o perfil técnico de erro OAuth2 a partir de um percurso de utilizador ou subtração (tipo de transfer). Defina o tipo de passo de orquestração como SendClaims com uma referência ao seu perfil técnico de erro OAuth2.

Se o percurso do utilizador ou o sub percurso já tiver outro SendClaims passo de orquestração, defina o DefaultCpimIssuerTechnicalProfileReferenceId atributo para o perfil técnico do emissor de tokens.

No seguinte exemplo:

  • O percurso SignUpOrSignIn-Custom do utilizador define o DefaultCpimIssuerTechnicalProfileReferenceId perfil JwtIssuertécnico do emissor de tokens .
  • O oitavo passo de orquestração verifica se existe errorCode . Se sim, chame o ReturnOAuth2Error perfil técnico para devolver o erro.
  • Se errorCode não existir, o nono passo de orquestração emite 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>

Passos seguintes

Saiba mais sobre o UserJourneys