Definire un profilo tecnico di errore personalizzato OAuth2 in un criterio personalizzato di Azure Active Directory B2C

Questo articolo descrive come gestire un errore personalizzato OAuth2 con Azure Active Directory B2C (Azure AD B2C). Usare questo profilo tecnico se si verifica un errore di logica all'interno dei criteri. Il profilo tecnico restituisce l'errore per l'applicazione relying party OAuth2 o OpenId Connect. Vedere la demo live del profilo tecnico dell'errore personalizzato OAuth2.

Per gestire il messaggio di errore OAuth2 personalizzato:

  1. Definire un profilo tecnico di errore OAuth2.
  2. Impostare il codice di errore e le attestazioni del messaggio di errore.
  3. Dal percorso utente chiamare il profilo tecnico dell'errore OAuth2.

Errore OAuth2

L'errore viene restituito con i dati seguenti:

  • error - access_denied
  • error_description : messaggio di errore che usa la convenzione AAD_Custom_<errorCode>: <errorMessage>.
  • ID correlazione: ID correlazione di Azure AD B2C.
  • Timestamp: timestamp dell'errore.

L'esempio seguente illustra un messaggio di errore personalizzato che restituisce all'app 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

Protocollo

L'attributo Nome dell'elemento Protocollo deve essere impostato su OAuth2. Impostare l'elemento OutputTokenFormat su OAuth2Error.

Nell'esempio seguente viene illustrato un profilo tecnico per 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> -->

Definire la trasformazione delle attestazioni per generare valori personalizzati del codice di errore e del messaggio di errore

Seguire questa procedura per generare valori personalizzati del codice di errore e del messaggio di errore:

  1. Individuare l'elemento ClaimsTransformations e quindi aggiungere il codice seguente al suo interno

    <!--
     <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. Aggiungere le due trasformazioni di attestazioni nell'elemento OutputClaimsTransformations di qualsiasi profilo tecnico prima della definizione tecnica di Oauth2:

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

Attestazioni di input

L'elemento InputClaims contiene un elenco di attestazioni necessarie per restituire l'errore OAuth2.

ClaimReferenceId Obbligatorio Description
errorCode Codice errore.
errorMessage Messaggio di errore.

Chiavi crittografiche

L'elemento CryptographicKeys contiene la chiave seguente:

Attributo Obbligatorio Descrizione
issuer_secret Un certificato X509 (set di chiavi RSA). Usare la B2C_1A_TokenSigningKeyContainer chiave configurata in Introduzione ai criteri personalizzati.

Richiamare il profilo tecnico

È possibile chiamare il profilo tecnico di errore OAuth2 da un percorso utente o da un percorso secondario (tipo di transfer). Impostare il tipo di passaggio di orchestrazione su SendClaims con un riferimento al profilo tecnico dell'errore OAuth2.

Se il percorso utente o il percorso secondario ha già un altro SendClaims passaggio di orchestrazione, impostare l'attributo sul profilo tecnico dell'autorità DefaultCpimIssuerTechnicalProfileReferenceId di certificazione del token.

Nell'esempio seguente :

  • Il percorso SignUpOrSignIn-Custom utente imposta l'oggetto DefaultCpimIssuerTechnicalProfileReferenceId sul profilo JwtIssuertecnico dell'autorità di certificazione del token.
  • L'ottavo passaggio di orchestrazione controlla se esiste errorCode . In caso affermativo, chiamare il ReturnOAuth2Error profilo tecnico per restituire l'errore.
  • Se errorCode non esiste, il nono passaggio di orchestrazione rilascia il 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>

Facoltativamente, è possibile usare le precondizioni per modificare il profilo tecnico degli errori Oauth2. Ad esempio, se non è presente un'attestazione di posta elettronica, è possibile impostare per chiamare il profilo tecnico dell'errore Oauth2:

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

Passaggi successivi

Informazioni su UserJourneys