Sdílet prostřednictvím


Definování technického profilu vlastní chyby OAuth2 ve vlastních zásadách Azure Active Directory B2C

Tento článek popisuje, jak zpracovat vlastní chybu OAuth2 pomocí Azure Active Directory B2C (Azure AD B2C). Tento technický profil použijte, pokud se v rámci zásad nepovede nějaká logika. Technický profil vrátí chybu aplikace předávající strany OAuth2 nebo OpenId Connect. Podívejte se na živou ukázku vlastního technického profilu chyby OAuth2.

Zpracování vlastní chybové zprávy OAuth2:

  1. Definujte technický profil chyby OAuth2.
  2. Nastavte kód chyby a deklarace deklarací chybových zpráv.
  3. Na cestě uživatele volejte technický profil chyby OAuth2.

Chyba OAuth2

Chyba se vrátí s následujícími daty:

  • chyba - access_denied
  • error_description – chybová zpráva používající konvenci AAD_Custom_<errorCode>: <errorMessage>.
  • ID korelace – ID korelace Azure AD B2C.
  • Časové razítko – časové razítko chyby.

Následující příklad ukazuje vlastní chybovou https://jwt.ms zprávu, která se vrátí do aplikace:

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

Protokol

Atribut Name elementu Protocol musí být nastaven na OAuth2. Nastavte OutputTokenFormat element na OAuth2Error.

Následující příklad ukazuje technický profil pro 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> -->

Definování transformace deklarací identity pro generování vlastních hodnot kódu chyby a chybové zprávy

Pomocí těchto kroků vygenerujte vlastní hodnoty kódu chyby a chybové zprávy:

  1. ClaimsTransformations Vyhledejte prvek a přidejte do něj následující kód.

    <!--
     <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. Přidejte dvě transformace deklarací identity do OutputClaimsTransformations prvku libovolného technického profilu před tím, než definujete technické informace Oauth2:

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

Vstupní deklarace identity

Element InputClaims obsahuje seznam deklarací identity vyžadovaných k vrácení chyby OAuth2.

ClaimReferenceId Požadováno Description
errorCode Ano Kód chyby.
errorMessage Ano Chybová zpráva

Kryptografické klíče

Element CryptographicKeys obsahuje následující klíč:

Atribut Požadováno Popis
issuer_secret Ano Certifikát X509 (sada klíčů RSA). B2C_1A_TokenSigningKeyContainer Použijte klíč, který nakonfigurujete v části Začínáme s vlastními zásadami.

Vyvolání technického profilu

Technický profil chyby OAuth2 můžete volat z cesty uživatele nebo dílčí cesty (typ transfer). Nastavte typ kroku orchestrace na SendClaims odkaz na technický profil chyby OAuth2.

Pokud cesta nebo dílčí cesta uživatele už má jiný SendClaims krok orchestrace, nastavte DefaultCpimIssuerTechnicalProfileReferenceId atribut na technický profil vystavitele tokenu.

V následujícím příkladu:

  • Cesta uživatele SignUpOrSignIn-Custom nastaví DefaultCpimIssuerTechnicalProfileReferenceId technický profil JwtIssuervystavitele tokenu .
  • Osmý krok orchestrace kontroluje, jestli existuje errorCode . Pokud ano, zavolejte ReturnOAuth2Error technický profil, aby se chyba vrátila.
  • Pokud errorCode neexistuje, devátý krok orchestrace vydá 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>

Volitelně můžete použít předběžné podmínky pro manipulaci s technickým profilem chyby Oauth2. Pokud například neexistuje žádná deklarace identity e-mailu, můžete nastavit volání technického profilu chyby Oauth2:

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

Další kroky

Další informace o UserJourneys