> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> post-login Actions を使用して MFA フローをカスタマイズし、特定の認証要素またはその組み合わせでユーザーに追加認証を求めます。

# Universal Login の MFA 選択をカスタマイズする

Auth0 は、[多要素認証 (MFA) ](/ja/docs/secure/multi-factor-authentication/multi-factor-authentication-factors) でユーザーアクセスを保護するためのさまざまな認証要素をサポートしています。`post-login` Actions を使用すると、特定の認証要素または認証要素の組み合わせでユーザーに追加認証を求めるように <Tooltip tip="多要素認証（MFA）: SMS で送信されるコードなど、ユーザー名とパスワードに加えて別の要素を使用するユーザー認証プロセス。" cta="用語集を表示" href="/ja/docs/glossary?term=MFA">MFA</Tooltip> フローをカスタマイズできます。また、ユーザーやその組織に関するコンテキスト情報を使用して、より個別化された体験を作成することもできます。たとえば、特定の組織への所属や割り当てられたユーザーロールに基づいて、特定の認証要素でユーザーに追加認証を求めるようにフローをカスタマイズできます。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  * この機能では、MFA の選択フローをカスタマイズできます。MFA の登録フローをカスタマイズする場合は、[Universal Login で MFA 登録をカスタマイズする](/ja/docs/secure/multi-factor-authentication/customize-mfa/customize-mfa-enrollments-universal-login) を参照してください。
  * Actions で MFA フローをカスタマイズできるのは、[Universal Login](/ja/docs/authenticate/login/auth0-universal-login/universal-login-vs-classic-login/universal-experience) を使用している場合のみです。
  * ここで説明している一部のメソッドは Universal Login でのみ使用でき、Classic Login では使用できません。詳細については、[Classic Login の MFA をカスタマイズする](/ja/docs/secure/multi-factor-authentication/customize-mfa/customize-mfa-classic-login) を参照してください。
</Callout>

<div id="how-it-works">
  ## 仕組み
</div>

MFA フローをカスタマイズするには、[Actions](/ja/docs/customize/actions) を使用できます。具体的には、次の Authentication API メソッドを使用して、[Login Flow](/ja/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger) の `post-login` トリガーをカスタマイズできます。

* [`challengeWith`](/ja/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-api-object#api-authentication-challengewith-factor-options): ワンタイムパスワード (OTP) など、ユーザーが認証に使用する必要がある認証要素を指定します。このメソッドはユーザーにデフォルトのチャレンジを提示し、必要に応じて別の認証方法を選択できる認証要素ピッカーへのアクセスを提供することもできます。
* [`challengeWithAny`](/ja/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-api-object#api-authentication-challengewithany-factors): メールアドレスや OTP など、認証時にユーザーが選択できる認証要素のグループを設定します。デフォルトでは、このメソッドは特定のチャレンジではなく認証要素ピッカーをユーザーに提示します。動作条件は次のとおりです。

  * 2 つ以上の認証要素が指定されている場合、認証要素ピッカーが表示されます。
  * ユーザーが指定された認証要素のうち 1 つにしか登録していない場合 (または指定された認証要素が 1 つ בלבדの場合) 、認証要素ピッカーはスキップされます。
  * ユーザーが指定された認証要素のいずれにも登録していない場合、コマンドは失敗します。

これらのメソッドを組み合わせて使用することで、必要に応じて MFA フローを調整できます。また、ロールや過去に使用した認証要素などのユーザーメタデータをこれらのメソッドに組み込むことで、より細かく調整されたフローを作成することもできます。

コマンドの MFA チャレンジを選択する際は、以下の認証要素、または `enrolledFactors` の値を使用できます。`enrolledFactors` は、ユーザーのアカウントに関連付けられた有効な認証要素の一覧を表します。

* `otp`
* `email`
* `push-notification`

  * `otpFallback`
* `phone`

  * `preferredMethod: voice`
  * `preferredMethod: sms`
  * `preferredMethod: both`
* `webauthn-platform`
* `webauthn-roaming`

配列 [`event.authentication.methods`](/ja/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-event-object#multi-factor-authentication) には、メソッドの name が `mfa` に設定されている場合、`type` フィールドが含まれます。`type` は文字列で、`enrolledFactors` の `type` フィールドで使用される認証要素の値 (上記参照) と一致する値を含みます。MFA チャレンジが実行されると、`methods` には `name:mfa` のオブジェクトが含まれ、その `type` にはそのチャレンジで使用された認証要素が設定されます。`methods` が更新されるのは、Action の開始時のみです。チャレンジの結果を確認するには、フロー内の次の Action で `methods` にアクセスする必要があります。

詳しくは、以下のリソースを参照してください。

* [Actions Triggers: post-login - Event Object](/ja/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-event-object)
* [Actions Triggers: post-login - API Object](/ja/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-api-object)

<div id="sequenced-and-contextual-flows">
  ### シーケンスフローとコンテキストフロー
</div>

`challengeWith` または `challengeWithAny` コマンドを使用すると、コンテキスト情報に基づいて、ユーザーに提示する最適なチャレンジやチャレンジの組み合わせを判断できます。具体的には、次のことが可能です。

* **シーケンスフロー**: 複数の異なる認証要素によるチャレンジを、特定の順序でユーザーに提示します。
* **コンテキストフロー**: フロー内のそれまでのチャレンジに基づいて、次にどの認証要素でユーザーにチャレンジするかを判断します。

これらのフローをわかりやすく示すために、次の例を見てみましょう。

```javascript lines theme={null}
// ACTION 1 

exports.onExecutePostLogin = async (event, api) => {

   api.authentication.challengeWithAny([{ type: 'phone'}, { type: 'push-notification' }]);

} 

// ============================================ 

// ACTION 2 

// 前のアクションでユーザーが行った操作に基づいて判断する 

exports.onExecutePostLogin = async (event, api) => { 

    if(event.authentication.methods.find(m => m.type === 'phone') && event.authorization?.roles.includes('admin')) { 

        api.authentication.challengeWith({ type: 'push-notification' }); 

    }

}
```

このシナリオでは、まず Action 1 で `challengeWithAny` コマンドを使用して、ユーザーに SMS によるチャレンジを求めます。次に、ユーザーは Admin のユーザーロールを持ち、かつ SMS チャレンジも完了しているため、Action 2 でプッシュ通知によるチャレンジを求めます。

このフローでは、次の理由から、ユーザーにどの認証要素でチャレンジするかを判断できます。

1. Action 1 の実行後にフローが一時停止します。
2. ユーザーが Action 1 によって要求された MFA フローを完了します。
3. Action 2 の `event.authentication.methods.type` に、直前の MFA チャレンジの情報が設定されます。
4. Action 1 のコンテキスト情報を使用してフローが再開され、Action 2 が実行されます。

この例で示す動作は、Actions でリダイレクトを使用する場合と似ていますが、`challengeWith` および `challengeWithAny` を使用するコマンドには、次の固有の利点があります。

* 各コマンドの後でフローが一時停止するため、後続の Actions で利用できるユーザー情報を蓄積できます。一方、リダイレクトはフロー内の最後のコマンドとして一度だけ発生します。
* `challengeWith` または `challengeWithAny` コマンドを含む各 Action の実行後に MFA がトリガーされます。リダイレクトでは、MFA はパイプライン内の最後の Action として実行されます。

**注**: このような Actions の実行方法は、`challengeWith` または `challengeWithAny` コマンドを含むものにのみ適用されます。ほかの目的の Actions には影響しません。

<div id="before-you-begin">
  ## 始める前に
</div>

MFA フローをカスタマイズする前に、まずテナントで MFA を有効にし、ユーザーに適切な認証要素を登録するよう求める必要があります。

<div id="prepare-your-tenant">
  ### テナントを準備する
</div>

開始するには、テナントで MFA を設定し、Customize MFA Factors using Actions 設定を有効にします。1 つ以上の認証要素を設定し、[Security > Multifactor Auth](https://manage.auth0.com/#/security/mfa) にある <Tooltip tip="Auth0 Dashboard: サービスを設定するための Auth0 のメイン製品です。" cta="用語集を表示" href="/ja/docs/glossary?term=Auth0+Dashboard">Auth0 Dashboard</Tooltip> で MFA ポリシーを定義できます。

* セットアップ手順の詳細については、[多要素認証を有効にする](/ja/docs/secure/multi-factor-authentication/enable-mfa) を参照してください。
* 特定の認証要素の設定については、[多要素認証の要素](/ja/docs/secure/multi-factor-authentication/multi-factor-authentication-factors) を参照してください。

フローをカスタマイズするには、Additional Settings セクションで Customize MFA Factors using Actions トグルを**必ず有効にする**必要があります。この設定が有効になっていないと、カスタマイズしたフローは正しく動作しません。

<Frame>
  <img src="https://mintcdn.com/translations/Dcx0M11uuptU53TX/docs/images/cdy7uua7fh8z/2hv0ELTkkka3t230SXfxw/46def5395652b2451cfc9e0ad01a371a/MFA_actions.png?fit=max&auto=format&n=Dcx0M11uuptU53TX&q=85&s=50238f8cd9519f96ed2b438c9799602c" alt="Auth0 Dashboard > Security > Multi-factor Auth > Additional Settings" data-og-width="941" width="941" data-og-height="365" height="365" data-path="docs/images/cdy7uua7fh8z/2hv0ELTkkka3t230SXfxw/46def5395652b2451cfc9e0ad01a371a/MFA_actions.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/translations/Dcx0M11uuptU53TX/docs/images/cdy7uua7fh8z/2hv0ELTkkka3t230SXfxw/46def5395652b2451cfc9e0ad01a371a/MFA_actions.png?w=280&fit=max&auto=format&n=Dcx0M11uuptU53TX&q=85&s=b81a782d9ae6af71e12200500fd2ce97 280w, https://mintcdn.com/translations/Dcx0M11uuptU53TX/docs/images/cdy7uua7fh8z/2hv0ELTkkka3t230SXfxw/46def5395652b2451cfc9e0ad01a371a/MFA_actions.png?w=560&fit=max&auto=format&n=Dcx0M11uuptU53TX&q=85&s=d39c8f35ea331af43535c8acb4ae8382 560w, https://mintcdn.com/translations/Dcx0M11uuptU53TX/docs/images/cdy7uua7fh8z/2hv0ELTkkka3t230SXfxw/46def5395652b2451cfc9e0ad01a371a/MFA_actions.png?w=840&fit=max&auto=format&n=Dcx0M11uuptU53TX&q=85&s=3780fc111d9521c30b6545f8fbdc0185 840w, https://mintcdn.com/translations/Dcx0M11uuptU53TX/docs/images/cdy7uua7fh8z/2hv0ELTkkka3t230SXfxw/46def5395652b2451cfc9e0ad01a371a/MFA_actions.png?w=1100&fit=max&auto=format&n=Dcx0M11uuptU53TX&q=85&s=00d331892f83f2a395efb8380884f5e5 1100w, https://mintcdn.com/translations/Dcx0M11uuptU53TX/docs/images/cdy7uua7fh8z/2hv0ELTkkka3t230SXfxw/46def5395652b2451cfc9e0ad01a371a/MFA_actions.png?w=1650&fit=max&auto=format&n=Dcx0M11uuptU53TX&q=85&s=877796b907df280736c4e4969263363e 1650w, https://mintcdn.com/translations/Dcx0M11uuptU53TX/docs/images/cdy7uua7fh8z/2hv0ELTkkka3t230SXfxw/46def5395652b2451cfc9e0ad01a371a/MFA_actions.png?w=2500&fit=max&auto=format&n=Dcx0M11uuptU53TX&q=85&s=2a2265a588fac3455f1a976f3427ec7a 2500w" />
</Frame>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  * `challengeWith` および `challengeWithAny` コマンドを呼び出す Actions は、[api.multifactor.enable](/ja/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-api-object) によって有効になっているチャレンジをすべて上書きします。また、**Define Policies** で使用できる MFA 設定よりも優先されます。
  * ユーザーがアプリケーションへのアクセスを試みる際に MFA を完了できるようにするには、**Require Multi-factor Auth** 設定を **Use Adaptive MFA** または **Always** のいずれかに設定してください。Actions コードが実行されない場合、この設定がバックアップとして機能し、ユーザーが MFA を回避するのを防ぎます。
  * コマンドでリスク評価を使用する場合は、**Adaptive MFA Risk Assessment** トグルを有効にし、`post-login` Actions コードで [event.authentication.riskAssessment](/ja/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-api-object) を使用してください。
</Callout>

<div id="enroll-users-in-factors">
  ### ユーザーを認証要素に登録する
</div>

MFA を設定したら、有効化した認証要素のうち 1 つ以上にユーザーが登録されるようにしてください。ユーザーは、`post-login` Action コマンドでチャレンジされる前に、認証手段に登録しておく必要があります。

ユーザーがサインアップした後、またはテナント内で作成された後は、<Tooltip tip="Management API: 顧客が管理タスクを実行するための製品。" cta="用語集を表示" href="/ja/docs/glossary?term=Management+API">Management API</Tooltip> の [authentication-methods](https://auth0.com/docs/api/management/v2/users/post-authentication-methods) エンドポイントを使用して登録情報を作成できます。また、Auth0 Dashboard のユーザープロファイルページから、ユーザーの登録を直接管理することもできます。

<div id="customize-your-mfa-flows">
  ## MFA フローをカスタマイズする
</div>

テナントの準備ができたら、`post-login` Actions を作成して MFA フローをカスタマイズできます。手順とユースケース例を以下に示します。

<Warning>
  テナント内の Actions (または一連の Actions) では、1 回のユーザーフローにつき、次のコマンドのうち **4 つ** までしか実行できません。

  * `enrollWith`
  * `enrollWithAny`
  * `challengeWith`
  * `challengeWithAny`

  この上限を超えると (つまり、この種の 5 つ目のコマンドが実行されようとすると) 、認証エラーが発生します。
</Warning>

<div id="create-your-post-login-action">
  ### Post-Login Action を作成する
</div>

1. Auth0 Dashboard で [Actions > Flows](https://manage.auth0.com/#/actions/flows) に移動し、**Login** を選択します。
2. **Add Action** で **Custom** を選択し、**Create Action** をクリックします。
3. **Create Action** ポップアップで、以下を設定します。

   * Action の名前を入力します。
   * トリガーとして **Login / Post-Login** を選択します。
   * ランタイムには **Node 22 (Recommended)** を使用します。
4. ポップアップの内容が正しいことを確認し、**Create** を選択します。
5. 作成後、コードエディターに `onPostExecute` が表示されます。このハンドラーにカスタムコードまたはコードサンプルを追加します。
6. コードの準備ができたら、**Deploy** を選択します。
7. デプロイ成功の通知で **Add to Flow** を選択します。

   * **注**: 通知が閉じている場合は、コードエディターの上にある **Back to Flow** を選択します。
8. **Add Action** パネルから新しい Action を Login フローにドラッグ＆ドロップし、**Apply** を選択します。

Action をさらに更新するには、[Actions > Library > Custom](https://manage.auth0.com/#/actions/library) に移動して対象の Action を選択します。その後、必要に応じてコードを更新し、再デプロイできます。

<Warning>
  MFA フローにリダイレクトを追加する場合は、ユーザーが MFA をスキップまたは回避できないように、Action が次の条件を満たしていることを確認してください。

  * リダイレクト (`sendUserTo`) は、MFA の処理とは別の Action に含める必要があります。
  * リダイレクト Action は、フロー内で最後に実行される Action である必要があります。

  リダイレクトの詳細については、[Redirect with Actions](/ja/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/redirect-with-actions) を参照してください。
</Warning>

<div id="test-your-post-login-action">
  ### post-login Action をテストする
</div>

Action が想定どおりに機能することを確認するには、Auth0 Dashboard からテストできます。

* [Authentication > Authentication Profile](https://manage.auth0.com/#/authentication-profiles) に移動します。
* **Try** を選択して、新しいタブでサンプルのログインプロンプトを開きます。
* 認証情報を入力し、新しい MFA フローをテストします。

フローが正常に完了すると、確認画面が表示されます。問題が発生した場合は、Auth0 Dashboard の [Actions > Library > Custom](https://manage.auth0.com/#/actions/library) に移動してコードを更新できます。

<div id="example-use-cases">
  ## 使用例
</div>

以下に、MFA フローをカスタマイズする際の一般的なユースケースを示します。

<div id="use-current-enrollments-to-determine-challenge-method">
  ### 現在の登録認証要素に基づいてチャレンジ方法を決定する
</div>

次のサンプルでは、ユーザーが以下の認証要素を登録済みの場合に、MFA チャレンジを実行します。

* ワンタイムパスワード (OTP)
* 電話番号

```js lines theme={null}
exports.onExecutePostLogin = async (event, api) => {

 api.authentication.challengeWithAny([{type: 'otp'}, {type: 'phone'}]);

}
```

<div id="use-roles-to-determine-challenge-method">
  ### ロールを使用してチャレンジ方法を決定する
</div>

次のサンプルでは、すべてのユーザーに OTP を求めます。ユーザーが Admin ロールを持ち、アプリケーションに対してより高いレベルのアクセスが必要な場合は、[step-up authentication](/ja/docs/secure/multi-factor-authentication/step-up-authentication) の一環として追加の認証要素を求めます。

```js lines theme={null}
exports.onExecutePostLogin = async (event, api) => {
    api.authentication.challengeWith({type: 'otp'});

    const isAdmin = event.authorization?.roles.includes('admin');
    if(isAdmin) {
        api.authentication.challengeWith({type: 'phone'});
    }
}
```

<div id="use-metadata-to-determine-challenge-method">
  ### メタデータを使用してチャレンジ方法を判断する
</div>

この例では、MFA 認証要素は[組織](/ja/docs/manage-users/organizations)レベルで有効になっています。このサンプルでは、異なる種類のメタデータを使用して、各ユーザーに適したチャレンジを判断します。

* **組織メタデータ**: 特定の組織で有効になっている認証要素など、組織レベルのデータ。
* **ユーザーメタデータ**: ユーザーのプロフィールに電話番号が関連付けられているかどうかなど、ユーザーレベルのデータ。

```js lines expandable theme={null}
exports.onExecutePostLogin = async (event, api) => {
  const orgFactors = event.organization?.metadata.factors.split(',') ?? [];

  // ユーザーが利用可能なファクターと組織で有効なファクターの積集合を取得する
  const availableFactors = orgFactors.filter(f => event.user?.enrolledFactors?.some(ef => ef.type === f));

  // 利用可能であればプッシュを優先する
  if(availableFactors.includes('push-notification')) {
    api.authentication.challengeWith({ type: 'push-notification' });
    return;
  }

  // ユーザーが確認済みの電話番号を持ち、組織がSMSとメールアドレスを
  // 許可している場合、SMSを優先し、利用可能であれば
  // メールアドレスをフォールバックとして使用する
  if(event.user.phone_number && 
     event.user.phone_verified && 
     availableFactors.includes('phone')) {
    if(availableFactors.includes('email')) {
      api.authentication.challengeWith({ type: 'phone' }, {
        additionalFactors: [{
          type: 'email'
        }]
      });
    } else {
      api.authentication.challengeWith({ type: 'phone' });
    }

    return;
  }

  // プッシュ通知や電話番号を優先できなかった場合、組織で有効であれば
  // メールアドレスにフォールバックし、そうでなければ拒否する。
  if(availableFactors.includes('email')) {
    api.authentication.challengeWith({ type: "email" });
    return;
  }

  api.access.deny("No MFA factors available for this org + user");
};
```

<div id="allow-users-to-select-an-alternate-method-of-authentication">
  ### ユーザーが別の認証方法を選択できるようにする
</div>

より柔軟に利用できるように、MFA チャレンジの一部として **Try Another Method** リンクをユーザーに表示できます。このリンクを使うと、ユーザーはデフォルトのチャレンジとは異なる認証方法を選択できます。

これを実現するには、Actions コードに [`additionalFactors`](/ja/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-api-object#param-additional-factors) パラメーターを含めます。このパラメーターは、すべてのユーザーに対して特定の認証要素を設定することも、`enrolledFactors` を使用してユーザーが希望する認証要素を選べるようにすることもできます。

**特定の認証要素**

次のサンプルでは、デフォルトで OTP によるチャレンジをユーザーに要求します。必要に応じて、ユーザーは **Try Another Method** リンクから、代わりにメールアドレスで認証できます。

```js lines theme={null}
exports.onExecutePostLogin = async (event, api) => {
  api.authentication.challengeWith({ type: 'otp' }, 
    { additionalFactors: [{type: 'email'}] })
};
```

**登録済みの認証要素**

次のサンプルでは、既定でユーザーに OTP による認証を求めます。必要に応じて、ユーザーは「Try Another Method」リンクから、登録済みの別の認証要素を使用して認証できます。

```js lines theme={null}
exports.onExecutePostLogin = async (event, api) => {
  const enrolledFactors = event.user.enrolledFactors.map((f) => ({type: f.type}));

  api.authentication.challengeWith({ type: 'otp' }, 
    { additionalFactors: enrolledFactors })
};
```

<div id="use-adaptive-mfa-to-determine-when-to-challenge-users">
  ### Adaptive MFA を使用して、ユーザーにいつ追加認証を求めるかを判断する
</div>

次の例では、ユーザーに追加認証を求めるべきかどうかを判断するために [Adaptive MFA](/ja/docs/get-started/auth0-teams/tenant-management) を使用します。

<Tooltip tip="Adaptive Multi-factor Authentication: ログイン試行が信頼度の低いログインであると判断された場合にのみ、ユーザーに対してトリガーされる多要素認証（MFA）。" cta="用語集を表示" href="/ja/docs/glossary?term=Adaptive+MFA">Adaptive MFA</Tooltip> は柔軟な MFA ポリシーであり、ログイン トランザクション中の潜在的なリスクを評価し、必要に応じてユーザーに追加の認証を求めることで、<Tooltip tip="Adaptive Multi-factor Authentication: ログイン試行が信頼度の低いログインであると判断された場合にのみ、ユーザーに対してトリガーされる多要素認証（MFA）。" cta="用語集を表示" href="/ja/docs/glossary?term=bad+actors">悪意のある攻撃者</Tooltip> からテナントを保護します。

このケースでは、ユーザーが見慣れないデバイスからログインし、全体の信頼度スコアが低または中の場合に、MFA が要求されます。

```javascript lines expandable theme={null}
/**
* PostLoginフローの実行中に呼び出されるハンドラー。
*
* @param {Event} event - ユーザーおよびログインコンテキストの詳細。
* @param {PostLoginAPI} api - ログインの動作を変更するために使用できるメソッドのインターフェース。
*/
exports.onExecutePostLogin = async (event, api) => {
  if (event.authentication?.riskAssessment?.assessments.NewDevice) {

  // 条件の例: NewDeviceの信頼度レベルのみに基づいてMFAを要求する。
    // 未知のデバイスからログインした場合にMFAを要求する。
    let shouldPromptMfa;

    switch (event.authentication.riskAssessment.assessments.NewDevice.confidence) {
      case 'low':
      case 'medium':
        shouldPromptMfa = true;
        break;
      case 'high':
        shouldPromptMfa = false;
        break;
      case 'neutral':
        // このアセッサーが信頼度に関する有用な情報を持たない場合、
        // MFAを要求しない。
        shouldPromptMfa = false;
        break;
    }

      // ユーザーが少なくとも1つのMFA認証要素を登録している場合にのみ
      // MFAを要求する意味がある。
    const canPromptMfa = event.user.enrolledFactors?.length > 0;

    if (shouldPromptMfa && canPromptMfa) {
      const enrolledFactors = event.user.enrolledFactors.map((f) => ({type: f.type}));
      api.authentication.challengeWithAny(enrolledFactors);
    }

  }

};
```

<div id="use-actions-to-challenge-users">
  ### Actions を使用してユーザーに追加認証を要求する
</div>

Actions を使用すると、Login Flow の `post-login` トリガーを変更して MFA フローをカスタマイズできます。この例では、認証方法として `phone` と `preferredMethod: 'both'` を使用しており、ユーザーのアカウントに関連付けられている有効な MFA 認証要素を参照します。詳細については、[Actions Triggers: post-login - Event Object](/ja/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-event-object) を参照してください。

```js lines theme={null}
api.authentication.challengeWith({ 
  type: 'phone', 
  options: { preferredMethod: 'both'} 
});
```

<div id="troubleshooting">
  ## トラブルシューティング
</div>

カスタマイズした MFA フローでエラーや想定外の結果が発生した場合は、以下の情報を参考にして問題を特定し、解決してください。

<div id="tenant-logs">
  ### テナントログ
</div>

カスタマイズした MFA フローは、[テナントログ](/ja/docs/deploy-monitor/logs) で監視できます。

テナントログは、Auth0 Dashboard の [Monitoring > Logs](https://manage.auth0.com/#/logs) で確認できます。あるいは、[Management API](https://auth0.com/docs/api/management/v2/introduction) を使用してログを取得することもできます。

お客様またはユーザーに想定外の動作が発生した場合は、詳細を確認するために、次のイベントコードについてテナントログを確認してください。

| シナリオ                                                                                     | イベントコード | エラーの説明                                                                                                                                                         |
| ---------------------------------------------------------------------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ユーザーに MFA が求められたものの、要求された認証要素のいずれもチャレンジに使用できません。この場合、ユーザーは MFA を完了できません。                 | mfar    | このシナリオでは、次のエラーメッセージが表示されます。<br /><br />PostLogin Action で MFA チャレンジが使用されていますが、要求された認証要素が適切に設定されていません。MFA を実行するには、要求された認証要素を有効にし、ユーザーがそれらに登録されていることを確認してください。   |
| ユーザーに MFA が求められたものの、要求された認証要素の 1 つをチャレンジに使用できません。この場合、ユーザーは要求された別の認証要素を使用して MFA を完了できます。 | w       | このシナリオでは、次の警告メッセージが表示されます。<br /><br />PostLogin Action で MFA チャレンジが使用されていますが、要求された認証要素 \{factor name} が適切に設定されていません。要求された認証要素を有効にし、ユーザーがそれに登録されていることを確認してください。 |

<div id="troubleshooting-checklist">
  ### トラブルシューティング チェックリスト
</div>

次のチェックリストでは、カスタマイズした MFA フローでよくある問題を特定して解決するための追加の確認事項を示します。

1. **Customize MFA factors with Actions** トグルを有効にする必要があります。

   * [Auth0 Dashboard > Security > Multi-factor Auth](https://manage.auth0.com/#/security/mfa) に移動し、Additional Settings セクションのトグルが有効になっていることを確認します。
2. Actions で参照している認証要素が、テナントで有効になっている必要があります。

   * **コードを確認する**: [Auth0 Dashboard > Actions > Library > Custom](https://manage.auth0.com/#/actions/library) に移動し、Actions のコードを確認します。参照しているすべての認証要素がユースケースに適していることを確認します。
   * **認証要素を確認する**: [Auth0 Dashboard > Security > Multi-factor Auth](https://manage.auth0.com/#/security/mfa) に移動し、Actions で参照しているすべての認証要素が有効になっていることを確認します。
3. ユーザーは、Actions で参照している認証要素に登録されている必要があります。

   * 特定のユーザーでエラーが発生している場合は、そのユーザーの詳細を確認し、適切な認証要素に登録されていることを確認します。[**Auth0 Dashboard > User Management > Users**](https://manage.auth0.com/#/users) に移動し、一覧からそのユーザーの名前を選択します。

     * **Detail タブ**の Multi-factor Authentication セクションを確認して、登録状況を確認します。ユーザーが登録されていない場合は、このセクションにある **Send an enrollment invitation** リンクを使用できます。
     * または、**Raw JSON タブ**でユーザーの登録状況を確認することもできます。この情報は [Management API](https://auth0.com/docs/api/management/v2/users/get-authentication-methods) を使用して取得することもできます。ただし、メール確認リンクで設定された Email 要素など、自動登録された認証手段は API には一覧表示されない点に注意してください。
   * ユーザーが適切な認証要素に登録されていない場合は、Management API の [authentication-methods](https://auth0.com/docs/api/management/v2/users/post-authentication-methods) エンドポイントを使用して登録を作成できます。ユーザーの登録状況は、Auth0 Dashboard のプロフィールページから直接管理することもできます。
4. Actions がデプロイされ、Pipeline に保存されていることを確認します。

   * [Auth0 Dashboard > Actions > Library > Custom](https://manage.auth0.com/#/actions/library) に移動します。一覧で Action を見つけ、ステータスが **Deployed** であることを確認します。別のステータスが表示されている場合は、Action を開いてコードを確認し、右上の **Deploy** をクリックします。
   * [Auth0 Dashboard > Actions > Library > Flows](https://manage.auth0.com/#/actions/flows) に移動し、**Login** を選択します。フローに Action が表示されていることを確認します。表示されていない場合は、Add Action パネルの **Custom タブ**を開き、Action を Login フローにドラッグ アンド ドロップします。その後、**Apply** を選択します。
5. `post-login` Actions を最新バージョンにアップグレードしていることを確認します。

   * [Auth0 Dashboard > Actions > Library > Custom](https://manage.auth0.com/#/actions/library) に移動し、Action を選択します。Action が古い場合は、Action の更新を促す黄色のバナーが表示されます。バナーが表示されたら、**Update** を選択します。
   * Deploy CLI を使用する場合は、`post-login` Actions の最新バージョンをデプロイ対象として指定することもできます。詳細については、[Deploy CLI を構成する](/ja/docs/deploy-monitor/deploy-cli-tool/configure-the-deploy-cli) を参照してください。
