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

Azure Active Directory B2C (Azure AD B2C) では、確認コードを使用した電話番号の確認、または時間ベースのワンタイム パスワード (TOTP) コードの確認をサポートしています。

Protocol

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

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

次の例では、Azure AD MFA の技術プロファイルを示します。

<TechnicalProfile Id="AzureMfa-SendSms">
    <DisplayName>Send Sms</DisplayName>
    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.AzureMfaProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    ...

電話の確認モード

電話の確認モードでは、技術プロファイルによってコードを生成し、電話番号に送信してから、コードを確認します。 Azure AD MFA 技術プロファイルからは、エラー メッセージが返される場合もあります。 検証技術プロファイルでは、ユーザー体験を続ける前に、ユーザーが入力したデータを検証します。 検証技術プロファイルにより、エラー メッセージがセルフアサート ページに表示されます。 技術プロファイル:

  • ユーザーとやり取りするためのインターフェイスは用意していません。 代わりに、ユーザー インターフェイスは、セルフアサート技術プロファイルから、または検証技術プロファイルとしての表示制御から呼び出されます。
  • Azure AD MFA サービスを使用して、コードを生成し、電話番号に送信してから、コードを確認します。
  • テキスト メッセージを介して電話番号を検証します。

技術プロファイルでは、SMS テキスト メッセージを使用して確認コードを送信し、コードを確認するためのメソッドを提供します。 次のスクリーンショットは、電話検証のフローを示しています。

TOTP フローを示すスクリーンショット

SMS を送信する

電話を確認するには、最初の手順でコードを生成し、電話番号に送信します。 この手順では、次のオプションを構成できます。

入力クレーム

InputClaims 要素には、Azure AD MFA に送信する要求の一覧が含まれます。 要求の名前を、MFA 技術プロファイルで定義されている名前にマップすることもできます。

ClaimReferenceId 必須 説明
userPrincipalName はい 電話番号を所有しているユーザーの識別子。
phoneNumber はい SMS コードを送信する先の電話番号。
companyName いいえ SMS の会社名。 指定されていない場合は、アプリケーションの名前が使用されます。
locale いいえ SMS のロケール。 指定されていない場合は、ユーザーのブラウザーのロケールが使用されます。

出力クレーム

Azure AD MFA プロトコル プロバイダーでは出力要求は返されないため、出力要求を指定する必要はありません。

メタデータ

Metadata 要素には、次の属性が含まれています。

属性 必須 説明
Operation はい OneWaySMSである必要があります。
UI 要素

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

属性 必須 説明
UserMessageIfCouldntSendSms いいえ 指定された電話番号で SMS が受け付けられない場合のユーザー エラー メッセージ。
UserMessageIfInvalidFormat いいえ 指定された電話番号が有効な電話番号ではない場合のユーザー エラー メッセージ。
UserMessageIfServerError いいえ サーバーで内部エラーが発生した場合のユーザー エラー メッセージ。
UserMessageIfThrottled いいえ 要求が調整された場合のユーザー エラー メッセージ。

例: SMS を送信する

次の例では、SMS でコードを送信するために使用される Azure AD MFA 技術プロファイルを示します。

<TechnicalProfile Id="AzureMfa-SendSms">
  <DisplayName>Send Sms</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.AzureMfaProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="Operation">OneWaySMS</Item>
  </Metadata>
  <InputClaimsTransformations>
    <InputClaimsTransformation ReferenceId="CombinePhoneAndCountryCode" />
    <InputClaimsTransformation ReferenceId="ConvertStringToPhoneNumber" />
  </InputClaimsTransformations>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="userPrincipalName" />
    <InputClaim ClaimTypeReferenceId="fullPhoneNumber" PartnerClaimType="phoneNumber" />
  </InputClaims>
</TechnicalProfile>

コードの確認

コードの確認手順では、ユーザーに送信されたコードを確認します。 この手順では、次のオプションを構成できます。

入力クレーム

InputClaims 要素には、Azure AD MFA に送信する要求の一覧が含まれます。 要求の名前を、MFA 技術プロファイルで定義されている名前にマップすることもできます。

ClaimReferenceId 必須 説明
phoneNumber はい 以前にコードを送信するために使用したのと同じ電話番号。 また、電話検証セッションを探すためにも使用されます。
verificationCode はい 確認のためにユーザーによって指定された確認コード

出力クレーム

Azure AD MFA プロトコル プロバイダーでは出力要求は返されないため、出力要求を指定する必要はありません。

メタデータ

Metadata 要素には、次の属性が含まれています。

属性 必須 説明
Operation はい Verifyである必要があります。
UI 要素

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

属性 必須 説明
UserMessageIfMaxAllowedCodeRetryReached いいえ ユーザーによる確認コードの試行回数が多すぎる場合のユーザー エラー メッセージ。
UserMessageIfServerError いいえ サーバーで内部エラーが発生した場合のユーザー エラー メッセージ。
UserMessageIfThrottled いいえ 要求が調整されている場合のユーザー エラー メッセージ。
UserMessageIfWrongCodeEntered いいえ 検証のために入力されたコードが間違っている場合のユーザー エラー メッセージ。

例: コードを検証する

次の例では、コードの検証に使用される Azure AD MFA の技術プロファイルを示します。

<TechnicalProfile Id="AzureMfa-VerifySms">
    <DisplayName>Verify Sms</DisplayName>
    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.AzureMfaProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    <Metadata>
        <Item Key="Operation">Verify</Item>
    </Metadata>
    <InputClaims>
        <InputClaim ClaimTypeReferenceId="phoneNumber" PartnerClaimType="phoneNumber" />
        <InputClaim ClaimTypeReferenceId="verificationCode" />
    </InputClaims>
</TechnicalProfile>

TOTP モード

このモードでは、ユーザーは、Microsoft Authenticator アプリなど、時間ベースのワンタイム パスワード (TOTP) 検証をサポートする Authenticator 認証アプリを、所有しているデバイスにインストールする必要があります。

ユーザーは、最初のサインアップまたはサインイン時に、Authenticator アプリを使用して QR コードをスキャンするか、ディープ リンクを開くか、手動でコードを入力します。 TOTP コードを確認するには、Begin verify OTP の後に Verify TOTP 検証技術プロファイルを使用します。

それ以降のサインインでは、Get available devices メソッドを使用して、ユーザーが既にデバイスを登録しているかどうかを確認します。 使用可能なデバイスの数が 0 より大きい場合は、ユーザーが前に登録したことを示しています。 この場合、ユーザーは、Authenticator アプリに表示される TOTP コードを入力する必要があります。

技術プロファイル:

  • ユーザーとやり取りするためのインターフェイスは用意していません。 代わりに、ユーザー インターフェイスは、TOTP 表示コントロールを使用してセルフアサート技術プロファイルから呼び出されます。
  • Azure AD MFA サービスを使用して、TOTP コードを検証します。
  • ユーザーがデバイスを既に登録しているかどうかを確認します。

次のスクリーンショットは、TOTP の登録と検証のフローを示しています。 まず、使用可能なデバイスの数を確認します。 使用可能なデバイスの数が 0 の場合、ユーザーは登録オーケストレーション手順を実行します。 それ以外の場合は、ユーザーは確認オーケストレーション手順を実行します。

TOTP フローを示すスクリーンショット。

Get available devices

使用可能なデバイスの取得モードでは、ユーザーが使用できるデバイスの数を確認します。 使用可能なデバイスの数が 0 の場合は、ユーザーがまだ登録していないことを示します。

入力クレーム

InputClaims 要素には、Azure AD MFA に送信する要求の一覧が含まれます。 要求の名前を、MFA 技術プロファイルで定義されている名前にマップすることもできます。

ClaimReferenceId 必須 説明
userPrincipalName はい ユーザー プリンシパル名。

出力クレーム

出力要求要素には Azure AD MFA から返される要求の一覧が含まれています。 要求の名前を、MFA 技術プロファイルで定義されている名前にマップすることもできます。

ClaimReferenceId 必須 説明
numberOfAvailableDevices はい ユーザーが使用できるデバイスの数。

メタデータ

Metadata 要素には、次の属性が含まれています。

属性 必須 説明
Operation はい GetAvailableDevicesである必要があります。

例: Get available devices

次の例は、使用可能なデバイスの数を取得するために使用される Azure AD MFA の技術プロファイルを示しています。

<TechnicalProfile Id="AzureMfa-GetAvailableDevices">
  <DisplayName>Get Available Devices</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.AzureMfaProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="Operation">GetAvailableDevices</Item>
  </Metadata>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="userPrincipalName" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="numberOfAvailableDevices" />
  </OutputClaims>
</TechnicalProfile>

Begin verify TOTP

Begin verify TOTP では、検証プロセスを開始します。 この検証技術プロファイルは、TOTP コードを提示および検証するセルフアサート技術プロファイルから呼び出されます。 この検証技術プロファイルの後に、Verify TOTP 検証技術プロファイルを呼び出す必要があります。

入力クレーム

InputClaims 要素には、Azure AD MFA に送信する要求の一覧が含まれます。 要求の名前を、MFA 技術プロファイルで定義されている名前にマップすることもできます。

ClaimReferenceId 必須 説明
userPrincipalName はい ユーザー プリンシパル名。
objectId はい ユーザー オブジェクト ID。
secretKey はい ユーザーの秘密鍵。 この鍵は、Azure AD B2C ディレクトリのユーザーのプロファイルに格納され、Authenticator アプリと共有されます。 Authenticator アプリでは、シークレットを使用して TOTP コードを生成します。 この技術プロファイルでは、シークレットを使用して TOTP コードを確認します。

出力クレーム

Azure AD MFA プロトコル プロバイダーでは出力要求は返されないため、出力要求を指定する必要はありません。

メタデータ

Metadata 要素には、次の属性が含まれています。

属性 必須 説明
Operation はい BeginVerifyOTPである必要があります。

例: Begin verify TOTP

次の例は、TOTP 検証プロセスを開始するために使用される Azure AD MFA 技術プロファイルを示しています。

<TechnicalProfile Id="AzureMfa-BeginVerifyOTP">
  <DisplayName>Begin verify TOTP"</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.AzureMfaProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="Operation">BeginVerifyOTP</Item>
  </Metadata>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="secretKey" />
    <InputClaim ClaimTypeReferenceId="objectId" />
    <InputClaim ClaimTypeReferenceId="userPrincipalName" />
  </InputClaims>
</TechnicalProfile>

Verify TOTP

Verify TOTP メソッドでは、TOTP コードを確認します。 この検証技術プロファイルは、TOTP コードを提示および検証するセルフアサート技術プロファイルから呼び出されます。 この検証技術プロファイルの前に、Begin verify TOTP 検証技術プロファイルを呼び出す必要があります。

入力クレーム

InputClaims 要素には、Azure AD MFA に送信する要求の一覧が含まれます。 要求の名前を、MFA 技術プロファイルで定義されている名前にマップすることもできます。

ClaimReferenceId 必須 説明
otpCode はい ユーザーによって提供される TOTP コード。

出力クレーム

Azure AD MFA プロトコル プロバイダーでは出力要求は返されないため、出力要求を指定する必要はありません。

メタデータ

Metadata 要素には、次の属性が含まれています。

属性 必須 説明
Operation はい VerifyOTPである必要があります。

例: Verify TOTP

次の例では、TOTP コードの確認に使用される Azure AD MFA 技術プロファイルを示しています。

<TechnicalProfile Id="AzureMfa-VerifyOTP">
  <DisplayName>Verify OTP</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.AzureMfaProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="Operation">VerifyOTP</Item>
  </Metadata>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="otpCode" />
  </InputClaims>
</TechnicalProfile>

次のステップ