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:
- Defina um perfil técnico de erro OAuth2.
- Defina o código de erro e as afirmações de mensagens de erro.
- 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 oDefaultCpimIssuerTechnicalProfileReferenceId
perfilJwtIssuer
técnico do emissor de tokens . - O oitavo passo de orquestração verifica se existe
errorCode
. Se sim, chame oReturnOAuth2Error
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