Dela via


Definiera en anpassad teknisk profil för OAuth2-fel i en anpassad Azure Active Directory B2C-princip

I den här artikeln beskrivs hur du hanterar ett anpassat OAuth2-fel med Azure Active Directory B2C (Azure AD B2C). Använd den här tekniska profilen om något går fel i din princip. Den tekniska profilen returnerar fel till ditt OAuth2- eller OpenId Connect-förlitande partprogram. Kolla in livedemon för den tekniska profilen för anpassade OAuth2-fel.

Så här hanterar du ett anpassat OAuth2-felmeddelande:

  1. Definiera en teknisk OAuth2-felprofil.
  2. Ange felkoden och anspråk på felmeddelanden.
  3. Från användarresan anropar du den tekniska OAuth2-felprofilen.

OAuth2-fel

Felet returneras med följande data:

  • fel - access_denied
  • error_description – Felmeddelandet med hjälp av konventionen AAD_Custom_<errorCode>: <errorMessage>.
  • Korrelations-ID – Korrelations-ID:t för Azure AD B2C.
  • Tidsstämpel – tidsstämpeln för felet.

I följande exempel visas ett anpassat felmeddelande som returneras till https://jwt.ms appen:

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

Protokoll

Attributet Namn för protokollelementet måste anges till OAuth2. Ange elementet OutputTokenFormat till OAuth2Error.

I följande exempel visas en teknisk profil för 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> -->

Definiera anspråkstransformering för att generera anpassade värden för felkod och felmeddelande

Använd de här stegen för att generera anpassade värden för felkod och felmeddelande:

  1. Leta upp elementet ClaimsTransformations och lägg sedan till följande kod i det

    <!--
     <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> -->
    
  2. Lägg till de två anspråkstransformeringarna i elementet OutputClaimsTransformations i en teknisk profil före Oauth2 technical som du definierar:

        <OutputClaimsTransformations>
          <OutputClaimsTransformation ReferenceId="generateErrorCode" />
          <OutputClaimsTransformation ReferenceId="generateErrorMessage" />
        </OutputClaimsTransformations>
    

Indataanspråk

Elementet InputClaims innehåller en lista över anspråk som krävs för att returnera OAuth2-fel.

ClaimReferenceId Obligatoriskt Description
errorCode Ja Felkoden.
errorMessage Ja Felmeddelandet.

Krypteringsnycklar

CryptographicKeys-elementet innehåller följande nyckel:

Attribut Obligatoriskt Beskrivning
issuer_secret Ja Ett X509-certifikat (RSA-nyckeluppsättning). Använd nyckeln B2C_1A_TokenSigningKeyContainer som du konfigurerar i Kom igång med anpassade principer.

Anropa den tekniska profilen

Du kan anropa den tekniska OAuth2-felprofilen från en användarresa eller underresa (typ av transfer). Ange orkestreringsstegtypen till SendClaims med en referens till din tekniska OAuth2-felprofil.

Om din användarresa eller underresa redan har ett annat SendClaims orkestreringssteg anger du DefaultCpimIssuerTechnicalProfileReferenceId attributet till den tekniska profilen för token utfärdare.

I följande exempel:

  • Användarens resa SignUpOrSignIn-Custom anger DefaultCpimIssuerTechnicalProfileReferenceId till den tekniska profilen för token utfärdaren JwtIssuer.
  • Det åttonde orkestreringssteget kontrollerar om det errorCode finns. Om ja anropar du den ReturnOAuth2Error tekniska profilen för att returnera felet.
  • Om errorCode det inte finns utfärdar det nionde orkestreringssteget 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>

Du kan också använda förhandsvillkor för att ändra den tekniska Oauth2-felprofilen. Om det till exempel inte finns något e-postanspråk kan du ange att anropa teknisk profil för Oauth2-fel:

<OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="ReturnOAuth2Error">
      <Preconditions>
        <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
          <Value>email</Value>
          <Action>SkipThisOrchestrationStep</Action>
        </Precondition>
      </Preconditions>
    </OrchestrationStep>

Nästa steg

Läs mer om UserJourneys