Defina um perfil técnico de erro personalizado do OAuth2 em uma política personalizada do Azure Active Directory B2C
Este artigo descreve como tratar um erro personalizado do OAuth2 com o Azure AD B2C (Azure Active Directory B2C). Use esse perfil técnico se algo lógico der errado na sua política. O perfil técnico retorna um erro para o 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 tratar a mensagem de erro do OAuth2 personalizada:
- Defina um perfil técnico de erro do OAuth2.
- Defina o código de erro e as declarações de mensagem de erro.
- No percurso do usuário, chame o perfil técnico de erro do OAuth2.
Erro do OAuth2
O erro é retornar os seguintes dados:
- error -
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 seguinte exemplo demonstra um retorno de mensagem de erro personalizado para o aplicativo 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 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 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 elemento de qualquer perfil técnico antes do
OutputClaimsTransformations
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 | Obrigató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 | Obrigatório | Descrição |
---|---|---|
issuer_secret | Sim | Um certificado X509 (conjunto de chaves RSA). Use a chave B2C_1A_TokenSigningKeyContainer que você configurou em Introdução às políticas personalizadas. |
Invocar o perfil técnico
Você pode chamar o perfil técnico de erro do OAuth2 de um percurso do usuário ou subpercurso (tipo de transfer
). Defina o tipo de etapa de orquestração como SendClaims
com uma referência ao seu perfil técnico de erro do OAuth2.
Se o percurso do usuário ou o sub-percurso já tiver outra etapa de orquestração SendClaims
, defina o atributo DefaultCpimIssuerTechnicalProfileReferenceId
como o perfil técnico do emissor do token.
No exemplo a seguir:
- O percurso do usuário
SignUpOrSignIn-Custom
define oDefaultCpimIssuerTechnicalProfileReferenceId
para o perfil técnico do emissor do tokenJwtIssuer
. - A oitava etapa de orquestração verifica se o
errorCode
existe. Se sim, chame o perfil técnicoReturnOAuth2Error
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ê poderá 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óximas etapas
Saiba mais sobre UserJourneys