Udostępnij za pośrednictwem


Definiowanie niestandardowego profilu technicznego błędu OAuth2 w zasadach niestandardowych usługi Azure Active Directory B2C

W tym artykule opisano sposób obsługi niestandardowego błędu OAuth2 w usłudze Azure Active Directory B2C (Azure AD B2C). Użyj tego profilu technicznego, jeśli coś nie działa w ramach zasad. Profil techniczny zwraca błąd do aplikacji jednostki uzależnionej OAuth2 lub OpenId Connect. Zapoznaj się z pokazem na żywo niestandardowego profilu technicznego błędu OAuth2.

Aby obsłużyć niestandardowy komunikat o błędzie OAuth2:

  1. Zdefiniuj profil techniczny błędu OAuth2.
  2. Ustaw kod błędu i oświadczenia komunikatu o błędzie.
  3. W podróży użytkownika wywołaj profil techniczny błędu OAuth2.

Błąd OAuth2

Błąd jest zwracany z następującymi danymi:

  • błąd - access_denied
  • error_description — komunikat o błędzie korzystający z konwencji AAD_Custom_<errorCode>: <errorMessage>.
  • Identyfikator korelacji — identyfikator korelacji usługi Azure AD B2C.
  • Sygnatura czasowa — sygnatura czasowa błędu.

W poniższym przykładzie pokazano niestandardowy komunikat o błędzie powrotny https://jwt.ms do aplikacji:

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

Protokół

Atrybut Name elementu Protocol musi być ustawiony na OAuth2. Ustaw element OutputTokenFormat na OAuth2Errorwartość .

W poniższym przykładzie przedstawiono profil techniczny dla elementu 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> -->

Definiowanie przekształcenia oświadczeń w celu generowania niestandardowych wartości kodu błędu i komunikatu o błędzie

Wykonaj następujące kroki, aby wygenerować niestandardowe wartości kodu błędu i komunikatu o błędzie:

  1. ClaimsTransformations Znajdź element, a następnie dodaj do niego następujący kod

    <!--
     <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. Dodaj dwa przekształcenia oświadczeń w OutputClaimsTransformations elemecie dowolnego profilu technicznego przed zdefiniowaną przez Ciebie specyfikacją OAuth2:

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

Oświadczenia wejściowe

Element InputClaims zawiera listę oświadczeń wymaganych do zwrócenia błędu OAuth2.

ClaimReferenceId Wymagania Popis
errorCode Tak Kod błędu.
komunikat o błędzie Tak Komunikat o błędzie.

Klucze kryptograficzne

Element CryptographicKeys zawiera następujący klucz:

Atrybut Wymagania opis
issuer_secret Tak Certyfikat X509 (zestaw kluczy RSA). Użyj klucza skonfigurowanego B2C_1A_TokenSigningKeyContainer w temacie Wprowadzenie do zasad niestandardowych.

Wywoływanie profilu technicznego

Możesz wywołać profil techniczny błędu OAuth2 z podróży użytkownika lub podróży podrzędnej transfer (typu ). Ustaw typ kroku aranżacji na SendClaims z odwołaniem do profilu technicznego błędu OAuth2.

Jeśli podróż użytkownika lub podróż podrzędna ma już inny SendClaims krok aranżacji, ustaw DefaultCpimIssuerTechnicalProfileReferenceId atrybut na profil techniczny wystawcy tokenu.

W poniższym przykładzie:

  • Podróż SignUpOrSignIn-Custom użytkownika ustawia DefaultCpimIssuerTechnicalProfileReferenceId wartość dla profilu JwtIssuertechnicznego wystawcy tokenu .
  • Ósmy krok aranżacji sprawdza, czy errorCode istnieje. Jeśli tak, wywołaj ReturnOAuth2Error profil techniczny, aby zwrócić błąd.
  • Jeśli errorCode nie istnieje, dziewiąty krok orkiestracji wystawia 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>

Opcjonalnie możesz użyć warunków wstępnych do manipulowania profilem technicznym błędu OAuth2. Jeśli na przykład nie ma oświadczenia e-mail, możesz ustawić opcję wywołania profilu technicznego błędu OAuth2:

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

Następne kroki

Dowiedz się więcej o userJourneys