次の方法で共有


Azure Active Directory B2C カスタム ポリシーで OAuth2 カスタム エラーの技術プロファイルを定義する

この記事では、Azure Active Directory B2C (Azure AD B2C) で OAuth2 カスタム エラーを処理する方法について説明します。 ポリシーで何らかのロジックに問題がある場合は、この技術プロファイルを使用します。 技術プロファイルによって、OAuth2 または OpenId Connect 証明書利用者アプリケーションにエラーが返されます。 OAuth2カスタム エラー技術プロファイルのライブ デモをご確認ください。

カスタム OAuth2 エラー メッセージを処理するには:

  1. Auth2 エラーの技術プロファイルを定義します。
  2. エラーコードとエラー メッセージのクレームを設定します。
  3. ユーザー体験から、OAuth2 エラーの技術プロファイルを呼び出します。

OAuth2 エラー

エラーでは、次のデータが返されます。

  • error - access_denied
  • error_description - AAD_Custom_<errorCode>: <errorMessage> という規則を使用したエラー メッセージ。
  • Correlation ID - Azure AD B2C 関連付け ID。
  • Timestamp - エラーのタイムスタンプ。

次の例では、 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

Protocol

Protocol 要素の Name 属性は OAuth2 に設定する必要があります。 OutputTokenFormat 要素を OAuth2Error に設定します。

次の例は、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> -->

エラー コードとエラー メッセージのカスタム値を生成する要求変換を定義する

エラー コードとエラー メッセージのカスタム値を生成するには、次の手順を使用します。

  1. 要素を ClaimsTransformations 見つけて、その中に次のコードを追加します

    <!--
     <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. 定義する Oauth2 技術の前に、 OutputClaimsTransformations 技術プロファイルの要素に 2 つの要求変換を追加します。

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

入力クレーム

Inputclaims 要素には、OAuth2 エラーを返すために必要なクレームの一覧が含まれています。

ClaimReferenceId 必須 Description
errorCode はい エラー コード。
errorMessage はい エラー メッセージ。

暗号化キー

CryptographicKeys 要素には、次のキーが含まれています。

属性 必須 説明
issuer_secret はい X509 証明書 (RSA キー セット)。 「B2C_1A_TokenSigningKeyContainer」で構成した B2C_1A_TokenSigningKeyContainer キーを使用します。

技術プロファイルを呼び出す

ユーザー体験、または サブ体験 ( transferのタイプ)からOAuth2エラー技術プロファイルを呼び出すことができます。 オーケストレーション ステップの種類を SendClaims に設定し、OAuth2 エラーの技術プロファイルへの参照を設定します。

ユーザー体験またはサブ体験に既に別の SendClaims オーケストレーション ステップがある場合は、DefaultCpimIssuerTechnicalProfileReferenceId 属性をトークン発行者の技術プロファイルに設定します。

次に例を示します。

  • ユーザー体験 SignUpOrSignIn-Custom は、DefaultCpimIssuerTechnicalProfileReferenceId をトークン発行者の技術プロファイルに設定しますJwtIssuer
  • 8 番目のオーケストレーション ステップでは、errorCode が存在するかどうかを確認しています。 「はい」の場合は、ReturnOAuth2Error 技術プロファイルを呼び出してエラーを返します。
  • errorCode が存在しない場合は、9 番目のオーケストレーション ステップによってトークンが発行されます。
<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>

必要に応じて、前提条件を使用して Oauth2 エラー技術プロファイルを操作できます。 たとえば、電子メール要求がない場合は、Oauth2 エラー技術プロファイルを呼び出すように設定できます。

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

次のステップ

UserJourneys の詳細