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:
- Definire un profilo tecnico di errore OAuth2.
- Impostare il codice di errore e le attestazioni del messaggio di errore.
- Dal percorso utente chiamare il profilo tecnico dell'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
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:
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> -->
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>
L'elemento InputClaims contiene un elenco di attestazioni necessarie per restituire l'errore OAuth2.
ClaimReferenceId | Obbligatorio | Description |
---|---|---|
errorCode | Sì | Codice errore. |
errorMessage | Sì | Messaggio di errore. |
L'elemento CryptographicKeys contiene la chiave seguente:
Attributo | Obbligatorio | Descrizione |
---|---|---|
issuer_secret | Sì | Un certificato X509 (set di chiavi RSA). Usare la B2C_1A_TokenSigningKeyContainer chiave configurata in Introduzione ai criteri personalizzati. |
È 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'oggettoDefaultCpimIssuerTechnicalProfileReferenceId
sul profiloJwtIssuer
tecnico dell'autorità di certificazione del token. - L'ottavo passaggio di orchestrazione controlla se esiste
errorCode
. In caso affermativo, chiamare ilReturnOAuth2Error
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>
Informazioni su UserJourneys