Definir um perfil técnico de erro personalizado OAuth2 em uma política personalizada do Azure Ative Directory B2C
Este artigo descreve como lidar com um erro personalizado OAuth2 com o Azure Ative Directory B2C (Azure AD B2C). Use este perfil técnico se algo de errado na sua política. O perfil técnico retorna o erro para seu aplicativo de terceira parte confiável OAuth2 ou OpenId Connect. Confira a demonstração ao vivo do perfil técnico de erro personalizado do OAuth2.
Para manipular a mensagem de erro OAuth2 personalizada:
- Defina um perfil técnico de erro OAuth2.
- Defina o código de erro e as declarações de mensagem de erro.
- Na jornada do usuário, chame o perfil técnico de erro OAuth2.
Erro OAuth2
O erro é retornado com os seguintes dados:
- erro -
access_denied
- error_description - A mensagem de erro usando a convenção
AAD_Custom_<errorCode>: <errorMessage>
. - ID de correlação - A ID de correlação do Azure AD B2C.
- Carimbo de data/hora - O carimbo de data/hora do erro.
O exemplo a seguir demonstra uma mensagem de erro personalizada de retorno ao https://jwt.ms aplicativo:
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 Name do elemento Protocol precisa ser definido como OAuth2
. Defina o elemento OutputTokenFormat como OAuth2Error
.
O exemplo a seguir 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> -->
Definir a transformação de declarações para gerar valores personalizados de código de erro e mensagem de erro
Use estas etapas para gerar valores personalizados de código de erro e mensagem de erro:
Localize o
ClaimsTransformations
elemento e, em seguida, adicione o seguinte código dentro dele<!-- <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> -->
Adicione as duas transformações de declarações no
OutputClaimsTransformations
elemento de qualquer perfil técnico antes do técnico Oauth2 que você definir:<OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="generateErrorCode" /> <OutputClaimsTransformation ReferenceId="generateErrorMessage" /> </OutputClaimsTransformations>
Declarações de entrada
O elemento InputClaims contém uma lista de declarações necessárias para retornar o erro OAuth2.
ClaimReferenceId | Necessário | Description |
---|---|---|
errorCode | Sim | O código de erro. |
errorMessage | Sim | A mensagem de erro. |
Chaves criptográficas
O elemento CryptographicKeys contém a seguinte chave:
Atributo | Necessário | Description |
---|---|---|
issuer_secret | Sim | Um certificado X509 (conjunto de chaves RSA). Use a chave configurada B2C_1A_TokenSigningKeyContainer em Introdução às políticas personalizadas. |
Invoque o perfil técnico
Você pode chamar o perfil técnico de erro OAuth2 a partir de uma jornada do usuário ou subjornada (tipo de transfer
). Defina o tipo de etapa de orquestração como SendClaims
com uma referência ao seu perfil técnico de erro OAuth2.
Se sua jornada de usuário ou subjornada já tiver outra SendClaims
etapa de orquestração, defina o DefaultCpimIssuerTechnicalProfileReferenceId
atributo para o perfil técnico do emissor do token.
No exemplo a seguir:
- A jornada
SignUpOrSignIn-Custom
do usuário define o perfilJwtIssuer
técnico do emissor doDefaultCpimIssuerTechnicalProfileReferenceId
token. - A oitava etapa de orquestração verifica se ela
errorCode
existe. Se sim, ligue para oReturnOAuth2Error
perfil técnico para retornar o erro. - Se
errorCode
não existir, a nona etapa de orquestração emitirá 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>
Opcionalmente, você pode usar pré-condições para manipular o perfil técnico de erro Oauth2. Por exemplo, se não houver nenhuma reivindicação de e-mail, você pode definir para chamar o perfil técnico de erro Oauth2:
<OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="ReturnOAuth2Error">
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="false">
<Value>email</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
</OrchestrationStep>
Próximos passos
Saiba mais sobre UserJourneys