Freigeben über


Definieren eines technischen Profils für benutzerdefinierte OAuth2-Fehler in einer benutzerdefinierten Azure Active Directory B2C-Richtlinie

In diesem Artikel wird beschrieben, wie Sie einen benutzerdefinierten OAuth2-Fehler mit Azure Active Directory B2C (Azure AD B2C) behandeln. Verwenden Sie dieses technische Profil, wenn innerhalb Ihrer Richtlinie ein Logikfehler auftritt. Das technische Profil gibt einen Fehler an Ihre OAuth2- oder OpenId Connect-Anwendung der vertrauenden Seite zurück. Sehen Sie sich die Livedemo des benutzerdefinierten technischen Fehlerprofils für OAuth2 an.

So behandeln Sie eine Meldung zu einem benutzerdefinierten OAuth2-Fehler:

  1. Definieren Sie ein technisches Profil für OAuth2-Fehler.
  2. Legen Sie den Fehlercode und die Fehlermeldungsansprüche fest.
  3. Rufen Sie in der User Journey das technische Profil für OAuth2-Fehler auf.

OAuth2-Fehler

Der Fehler wird mit den folgenden Daten zurückgegeben:

  • error - access_denied
  • error_description: Die Fehlermeldung gemäß der Konvention AAD_Custom_<errorCode>: <errorMessage>
  • Correlation ID: Die Korrelations-ID von Azure AD B2C
  • Timestamp: Der Zeitstempel des Fehlers

Im folgenden Beispiel wird eine benutzerdefinierte Fehlermeldung veranschaulicht, die an die App https://jwt.ms zurückgegeben wird:

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

Protocol

Das Name-Attribut des Protocol-Elements muss auf OAuth2 festgelegt werden. Legen Sie das OutputTokenFormat-Element auf OAuth2Error fest.

Das folgende Beispiel zeigt ein technisches 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> -->

Definieren der Anspruchstransformation zum Generieren benutzerdefinierter Werte von Fehlercode und Fehlermeldung

Führen Sie die folgenden Schritte aus, um benutzerdefinierte Werte von Fehlercode und Fehlermeldung zu generieren:

  1. Suchen Sie das ClaimsTransformations Element, und fügen Sie dann den folgenden Code darin hinzu.

    <!--
     <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. Fügen Sie die beiden Anspruchstransformationen im OutputClaimsTransformations Element eines beliebigen technischen Profils vor dem von Ihnen definierten Oauth2-Technischen hinzu:

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

Eingabeansprüche

Das Element InputClaims enthält eine Liste der Ansprüche, die zum Zurückgeben des OAuth2-Fehlers erforderlich sind.

ClaimReferenceId Erforderlich Description
errorCode Ja Der Fehlercode.
errorMessage Ja Die Fehlermeldung.

Kryptografische Schlüssel

Das CryptographicKeys-Element enthält den folgenden Schlüssel:

attribute Erforderlich BESCHREIBUNG
issuer_secret Ja Ein X509-Zertifikat (RSA-Schlüsselsatz). Verwenden Sie den B2C_1A_TokenSigningKeyContainer-Schlüssel, den Sie unter Tutorial: Erstellen von Benutzerflows und benutzerdefinierten Richtlinien in Azure Active Directory B2C konfigurieren.

Aufrufen des technischen Profils

Sie können das technischen Fehlerprofil für OAuth2 über eine User Journey oder untergeordnete Journey (mit dem Typ transfer) aufrufen. Legen Sie den Typ OrchestrationStep mit einem Verweis auf Ihr technisches Profil für OAuth2-Fehler auf SendClaims fest.

Wenn Ihre User Journey oder untergeordnete Journey bereits über einen anderen SendClaims-Orchestrierungsschritt verfügt, legen Sie das Attribut DefaultCpimIssuerTechnicalProfileReferenceId auf das technische Profil des Tokenausstellers fest.

Im folgenden Beispiel:

  • Die User Journey SignUpOrSignIn-Custom legt DefaultCpimIssuerTechnicalProfileReferenceId auf das technische Profil des Tokenausstellers (JwtIssuer) fest.
  • Der achte Orchestrierungsschritt überprüft, ob errorCode vorhanden ist. Wenn ja, rufen Sie das technische Profil ReturnOAuth2Error auf, um den Fehler zurückzugeben.
  • Ist errorCode nicht vorhanden, wird im neunten Orchestrierungsschritt das Token ausgegeben.
<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>

Optional können Sie Die Voraussetzungen verwenden, um das technische Oauth2-Fehlerprofil zu bearbeiten. Wenn z. B. kein E-Mail-Anspruch vorhanden ist, können Sie festlegen, dass das technische Profil des Oauth2-Fehlers aufgerufen wird:

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

Nächste Schritte

Weitere Informationen zu UserJourneys.