Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
A partir de 1º de maio de 2025, o Azure AD B2C não estará mais disponível para compra para novos clientes. Saiba mais em nossas perguntas frequentes.
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:
-
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 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
ClaimsTransformationselemento 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
OutputClaimsTransformationsté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.
| ReivindicaçãoReferênciaId | Obrigatório | Descrição |
|---|---|---|
| código de erro | Sim | O código de erro. |
| mensagem de erro | 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-Customdefine oDefaultCpimIssuerTechnicalProfileReferenceIdpara o perfil técnico do emissor do tokenJwtIssuer. - A oitava etapa de orquestração verifica se o
errorCodeexiste. Se sim, chame o perfil técnicoReturnOAuth2Errorpara retornar o erro. - Se
errorCodenã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