Partage via


Définir un profil technique d’erreur personnalisée OAuth2 dans une stratégie personnalisée Azure Active Directory B2C

Cet article explique comment gérer une erreur personnalisée OAuth2 avec Azure Active Directory B2C (Azure AD B2C). Utilisez ce profil technique si une logique ne fonctionne pas correctement dans votre stratégie. Le profil technique retourne une erreur à votre application OAuth2 ou OpenId Connect basée sur les revendications. Consultez la démonstration en direct du profil technique d’erreur personnalisé OAuth2.

Pour gérer le message d’erreur OAuth2 personnalisé :

  1. Définissez un profil technique d’erreur OAuth2.
  2. Définissez le code d’erreur et les revendications de message d’erreur.
  3. À partir du parcours utilisateur, appelez le profil technique d’erreur OAuth2.

Erreur OAuth2

L’erreur retournée affiche les données suivantes :

  • error - access_denied
  • error_description : Message d’erreur respectant la convention AAD_Custom_<errorCode>: <errorMessage>.
  • Correlation ID : ID de corrélation Azure AD B2C.
  • Timestamp : Timestamp de l’erreur.

L’exemple suivant montre un message d’erreur personnalisé qui a été retourné à l’application 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

Protocol

L’attribut Name de l’élément Protocol doit être défini sur OAuth2. Définissez l’élément OutputTokenFormat sur OAuth2Error.

L’exemple suivant montre un profil technique pour 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> -->

Définir la transformation des revendications pour générer des valeurs personnalisées de code d’erreur et de message d’erreur

Procédez comme suit pour générer des valeurs personnalisées de code d’erreur et de message d’erreur :

  1. Recherchez l’élément ClaimsTransformations , puis ajoutez le code suivant à l’intérieur de celui-ci

    <!--
     <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. Ajoutez les deux transformations de revendications dans l’élément OutputClaimsTransformations d’un profil technique avant la technique Oauth2 que vous définissez :

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

Revendications d’entrée

L’élément InputClaims contient une liste de revendications requises pour retourner une erreur OAuth2.

ClaimReferenceId Obligatoire Description
errorCode Oui Code d'erreur.
errorMessage Oui Message d’erreur.

Clés de chiffrement

L’élément CryptographicKeys contient la clé suivante :

Attribut Obligatoire Description
issuer_secret Oui Certificat X509 (jeu de clés RSA). Utilisez la clé B2C_1A_TokenSigningKeyContainer que vous avez configurée à l’étape Bien démarrer avec les stratégies personnalisées.

Appeler le profil technique

Vous pouvez appeler le profil technique d’erreur OAuth2 à partir d’un parcours utilisateur ou sous-parcours (type de transfer). Définissez le type de l’étape d’orchestration sur SendClaims, en référençant votre profil technique d’erreur OAuth2.

Si le parcours ou sous-parcours utilisateur a déjà une autre étape d’orchestration SendClaims, définissez l’attribut DefaultCpimIssuerTechnicalProfileReferenceId sur le profil technique de l’émetteur de jeton.

Dans l’exemple suivant :

  • Le parcours utilisateur SignUpOrSignIn-Custom définit l’attribut DefaultCpimIssuerTechnicalProfileReferenceId sur le profil technique de l’émetteur de jeton JwtIssuer.
  • La huitième étape d’orchestration vérifie si errorCode existe. Si c’est le cas, appelez le profil technique ReturnOAuth2Error pour retourner l’erreur.
  • Si errorCode n’existe pas, la neuvième étape d’orchestration émet le jeton.
<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>

Si vous le souhaitez, vous pouvez utiliser des conditions préalables pour manipuler le profil technique d’erreur Oauth2. Par exemple, s’il n’existe aucune revendication de courrier électronique, vous pouvez définir pour appeler le profil technique d’erreur Oauth2 :

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

Étapes suivantes

Découvrir les Sous-parcours