Compartir vía


Definición de un perfil técnico de error personalizado de OAuth2 en una directiva personalizada en Azure Active Directory B2C

En este artículo se describe cómo controlar un error personalizado de OAuth2 con Azure Active Directory B2C (Azure AD B2C). Use este perfil técnico si hay algún problema en la lógica de la directiva. El perfil técnico devuelve un error a la aplicación de usuario de confianza de OAuth2 o de OpenId Connect. Vea esta demostración en directo de un perfil técnico de error personalizado de OAuth2.

Para controlar el mensaje de error de OAuth2 personalizado:

  1. Defina un perfil técnico de error de OAuth2.
  2. Establezca el código de error y las notificaciones del mensaje de error.
  3. Desde el recorrido del usuario, llame al perfil técnico de error de OAuth2.

Error de OAuth2

El error se devuelve con los datos siguientes:

  • error - access_denied
  • error_description: mensaje de error que usa la convención AAD_Custom_<errorCode>: <errorMessage>.
  • Id. de correlación: visualización del id. de correlación de Azure AD B2C.
  • Marca de tiempo: marca de tiempo del error.

En el ejemplo siguiente se muestra un mensaje de error personalizado que se devuelve a la aplicación 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

El atributo Name del elemento Protocol tiene que establecerse en OAuth2. Establezca el elemento OutputTokenFormat en OAuth2Error.

En el ejemplo siguiente se muestra un perfil técnico de 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> -->

Definición de la transformación de notificaciones para generar valores personalizados de código de error y mensaje de error

Siga estos pasos para generar valores personalizados de código de error y mensaje de error:

  1. Busque el ClaimsTransformations elemento y agregue el código siguiente dentro de él.

    <!--
     <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. Agregue las dos transformaciones de notificaciones en el OutputClaimsTransformations elemento de cualquier perfil técnico antes de la técnica de Oauth2 que defina:

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

Notificaciones de entrada

El elemento InputClaims contiene una lista de notificaciones necesarias para devolver el error de OAuth2.

ClaimReferenceId Obligatorio Description
errorCode Código de error.
errorMessage El mensaje de error.

Claves de cifrado

El elemento CryptographicKeys contiene la clave siguiente:

Atributo Obligatorio Descripción
issuer_secret Un certificado X509 (conjunto de claves RSA). Use la clave B2C_1A_TokenSigningKeyContainer que configuró en Introducción a las directivas personalizadas.

Llamada al perfil técnico

Puede llamar al perfil técnico de error de OAuth2 desde el recorrido de un usuario o desde un subrecorrido (tipo de transfer). Establezca el tipo de paso de orquestación en SendClaims con una referencia al perfil técnico de error de OAuth2.

Si el recorrido del usuario o el subrecorrido ya tiene otro paso de orquestación SendClaims, establezca el atributo DefaultCpimIssuerTechnicalProfileReferenceId en el perfil técnico del emisor del token.

En el ejemplo siguiente:

  • El recorrido del usuario SignUpOrSignIn-Custom establece DefaultCpimIssuerTechnicalProfileReferenceId en el perfil técnico del emisor de tokens JwtIssuer.
  • El octavo paso de orquestación comprueba si existe errorCode. En caso afirmativo, llame al perfil técnico ReturnOAuth2Error para devolver el error.
  • Si errorCode no existe, el noveno paso de orquestación emite el 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, puede usar condiciones previas para manipular el perfil técnico de error de Oauth2. Por ejemplo, si no hay ninguna notificación de correo electrónico, puede establecer para llamar al perfil técnico de error de Oauth2:

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

Pasos siguientes

Más información sobre UserJourneys