次の方法で共有


Azure AD B2C カスタム ポリシーでワンタイム パスワード技術プロファイルを定義する

重要

2025 年 5 月 1 日より、Azure AD B2C は新規のお客様向けに購入できなくなります。 詳細については、FAQ を参照してください

Azure Active Directory B2C で、カスタム ポリシーは、主に、複雑なシナリオに取り組む用途向けに設計されています。 ほとんどのシナリオで、組み込みユーザー フローを使用することをお勧めします。 まだ行っていない場合は、Active Directory B2C でのカスタム ポリシーの概要に関する記事で、カスタム ポリシー スターター パックの詳細を確認してください。

Azure Active Directory B2C (Azure AD B2C) は、ワンタイム パスワードの生成と検証を管理するためのサポートを提供します。 技術プロファイルを使用してコードを生成し、後でそのコードを確認します。

ワンタイム パスワード技術プロファイルは、コード検証中にエラー メッセージを返すこともできます。 検証技術プロファイルを使用して、ワンタイム パスワードとの統合を設計します。 検証技術プロファイルは、ワンタイム パスワード技術プロファイルを呼び出してコードを検証します。 検証技術プロファイルは、ユーザー体験が続行される前に、ユーザーが指定したデータを検証します。 検証技術プロファイルでは、セルフアサート ページにエラー メッセージが表示されます。

プロトコル

Protocol 要素の Name 属性は Proprietary に設定する必要があります。 ハンドラー属性には、Azure AD B2C で使用されるプロトコル ハンドラー アセンブリの完全修飾名が含まれている必要があります。

Web.TPEngine.Providers.OneTimePasswordProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

次の例は、ワンタイム パスワード技術プロファイルを示しています。

<TechnicalProfile Id="VerifyCode">
  <DisplayName>Validate user input verification code</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.OneTimePasswordProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  ...

コードを生成する

この技術プロファイルの最初のモードは、コードを生成することです。 このモードに対して構成できるオプションを次に示します。 生成されたコードと試行は、セッション内で追跡されます。

入力クレーム

InputClaims 要素には、ワンタイム パスワード プロトコル プロバイダーに送信するために必要な要求の一覧が含まれています。 要求の名前を以下に定義されている名前にマップすることもできます。

ClaimReferenceId (クレーム参照ID) 必須 説明
識別子 イエス 後でコードを検証する必要があるユーザーを識別する識別子。 これは、電子メール アドレスや電話番号など、コードが配信される宛先の識別子として一般的に使用されます。

InputClaimsTransformations 要素には、入力要求を変更したり、ワンタイム パスワード プロトコル プロバイダーに送信する前に新しい要求を生成したりするために使用される InputClaimsTransformation 要素のコレクションを含めることができます。

出力クレーム

OutputClaims 要素には、ワンタイム パスワード プロトコル プロバイダーによって生成された要求の一覧が含まれています。 要求の名前を以下に定義されている名前にマップすることもできます。

ClaimReferenceId (クレーム参照ID) 必須 説明
otp生成 イエス Azure AD B2C によってセッションが管理される生成されたコード。

OutputClaimsTransformations 要素には、出力要求を修正したり新しい要求を生成するために使用される、OutputClaimsTransformation 要素のコレクションが含まれている場合があります。

メタデータ

次の設定を使用して、コード生成モードを構成できます。

特性 必須 説明
オペレーション イエス 実行する操作。 指定できる値: GenerateCode
CodeExpirationInSeconds (英語) いいえ コードの有効期限が切れるまでの時間 (秒単位)。 最小値: 60;最大値: 1200;既定値: 600。 コードが提供されるたびに ( ReuseSameCodeを使用した同じコード、または新しいコード)、コードの有効期限が延長されます。 この時間は再試行タイムアウトの設定にも使用されます (最大試行回数に達すると、この時間が経過するまでユーザーは新しいコードの取得を試みることがロックアウトされます)
コードレングス いいえ コードの長さ。 既定値は 6 です。
CharacterSet いいえ 正規表現で使用するために書式設定されたコードの文字セット。 たとえば、a-z0-9A-Z のようにします。 既定値は 0-9 です。 文字セットには、指定されたセットに 10 文字以上の異なる文字を含める必要があります。
NumRetryAttempts いいえ コードが無効と見なされるまでの検証試行回数。 既定値は 5 です。 たとえば、NumRetryAttempts を 2 に設定すると、合計で 2 回の試行のみが許可されます (最初の + 1 回の再試行)。 3 回目の試行では、コードが正しいかどうかに関係なく、最大試行回数がスローされます。
NumCodeGeneration試行回数 いいえ 識別子あたりのコード生成試行の最大数。 既定値は、指定されていない場合は 10 されます。
ReuseSameCode (リユース・サメ・コード) いいえ 指定されたコードの有効期限が切れていないが有効な場合に、新しいコードを生成するのではなく、同じコードを指定する必要があるかどうか。 既定値は false です。

次の TechnicalProfile 例は、コードの生成に使用されます。

<TechnicalProfile Id="GenerateCode">
  <DisplayName>Generate Code</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.OneTimePasswordProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="Operation">GenerateCode</Item>
    <Item Key="CodeExpirationInSeconds">600</Item>
    <Item Key="CodeLength">6</Item>
    <Item Key="CharacterSet">0-9</Item>
    <Item Key="NumRetryAttempts">5</Item>
    <Item Key="NumCodeGenerationAttempts">10</Item>
    <Item Key="ReuseSameCode">false</Item>
  </Metadata>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="identifier" PartnerClaimType="identifier" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="otpGenerated" PartnerClaimType="otpGenerated" />
  </OutputClaims>
</TechnicalProfile>

コードの確認

この技術プロファイルの 2 番目のモードは、コードを検証することです。 このモードに対して構成できるオプションを次に示します。

入力クレーム

InputClaims 要素には、ワンタイム パスワード プロトコル プロバイダーに送信するために必要な要求の一覧が含まれています。 要求の名前を以下に定義されている名前にマップすることもできます。

ClaimReferenceId (クレーム参照ID) 必須 説明
識別子 イエス 以前にコードを生成したユーザーを識別する識別子。 これは、電子メール アドレスや電話番号など、コードが配信される宛先の識別子として一般的に使用されます。
otpToVerify(英語) イエス ユーザーによって提供される検証コード。

InputClaimsTransformations 要素には、入力要求を変更したり、ワンタイム パスワード プロトコル プロバイダーに送信する前に新しい要求を生成したりするために使用される InputClaimsTransformation 要素のコレクションを含めることができます。

出力クレーム

このプロトコル プロバイダーのコード検証中に提供される出力要求はありません。

OutputClaimsTransformations 要素には、出力要求を修正したり新しい要求を生成するために使用される、OutputClaimsTransformation 要素のコレクションが含まれている場合があります。

メタデータ

コード検証モードには、次の設定を使用できます。

特性 必須 説明
オペレーション イエス 実行する操作。 指定できる値: VerifyCode

UI 要素

次のメタデータを使用して、コード検証エラー時に表示されるエラー メッセージを構成できます。 メタデータは、 セルフアサート 技術プロファイルで構成する必要があります。 エラー メッセージは、ローカライズできます。

特性 必須 説明
UserMessageIfSessionDoesNotExist (英語) いいえ コード検証セッションの有効期限が切れている場合にユーザーに表示するメッセージ。 コードの有効期限が切れているか、特定の識別子に対してコードが生成されていません。
UserMessageIfMaxRetryAttempted いいえ 許可された検証試行の最大数を超えた場合にユーザーに表示するメッセージ。
UserMessageIfMaxNumberOfCodeGenerated いいえ コード生成が許容される最大試行回数を超えた場合にユーザーに表示するメッセージ。
UserMessageIfInvalidCode (英語) いいえ 無効なコードを指定した場合にユーザーに表示するメッセージ。
UserMessageIfVerificationFailedRetryAllowed いいえ 無効なコードを指定し、ユーザーが正しいコードを指定できる場合にユーザーに表示するメッセージ。
UserMessageIfSessionConflict(セッションコンフリクト) いいえ コードを検証できない場合にユーザーに表示するメッセージ。

次の例 TechnicalProfile は、コードの検証に使用されます。

<TechnicalProfile Id="VerifyCode">
  <DisplayName>Verify Code</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.OneTimePasswordProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="Operation">VerifyCode</Item>
  </Metadata>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="identifier" PartnerClaimType="identifier" />
    <InputClaim ClaimTypeReferenceId="otpGenerated" PartnerClaimType="otpToVerify" />
  </InputClaims>
</TechnicalProfile>

次のステップ

カスタム電子メール検証でワンタイム パスワード技術プロファイルを使用する例については、次の記事を参照してください。

  • Azure Active Directory B2C でのカスタム電子メール検証 (MailjetSendGrid)