> ## 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.

# Adaptive MFA のカスタマイズ

> Actions を使用して Auth0 Adaptive MFA をカスタマイズし、リスク評価の信頼度と詳細に基づいてログイン試行に対してチャレンジを要求するか、許可するか、ブロックするかを決定します。

[Auth0 Actions](/docs/ja-jp/customize/actions) を使用すると、さまざまなシナリオに合わせて <Tooltip tip="Adaptive Multi-factor Authentication: ログイン試行の信頼度が低いと判断された場合にのみユーザーに要求される多要素認証 (MFA)。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Adaptive+MFA">Adaptive MFA</Tooltip> をカスタマイズできます。

<div id="when-to-customize-adaptive-mfa">
  ## Adaptive MFA をカスタマイズするタイミング
</div>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Adaptive MFA のカスタマイズを検討すべきなのは、ユーザーが MFA に登録済みで、かつ識別子としてメールアドレスを使用する必要がある場合に限られます。
</Callout>

ユーザーが <Tooltip tip="多要素認証（MFA）: ユーザー名とパスワードに加えて、SMS で送信されるコードなどの認証要素を用いるユーザー認証プロセス。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=MFA">MFA</Tooltip> に登録されていない場合は、Adaptive MFA のデフォルトポリシーを使用してください。ユーザーが MFA に登録されておらず、かつ Action が高リスクと判断した場合、<Tooltip tip="Bad Actors: 危害を加える意図を持って、事業や環境に脅威をもたらす存在（個人またはグループ）。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=bad+actor">悪意のある主体</Tooltip> を阻止するための手段は限られます。

Adaptive MFA のカスタマイズを始める前に、いくつか自問してみてください。

* どの信頼度レベルで MFA をトリガーしますか？
* リスクをどのように測定しますか？
* 信頼度は Auth0 に測定させますか、それとも独自に測定しますか？
* MFA に登録されていないユーザーにどう対応しますか？

<div id="confidence-scores">
  ## 信頼度スコア
</div>

Adaptive MFA は、`NewDevice`、`ImpossibleTravel`、`UntrustedIP` の 3 つの評価の分析に基づいて、総合的な信頼度スコアを算出します。詳しくは、[Adaptive MFA: 仕組み](/docs/ja-jp/secure/multi-factor-authentication/adaptive-mfa)を参照してください。

各評価にはそれぞれ独自の信頼度スコアがあり、各信頼度スコアには対応するアクションがあります。

| Confidence score | Description                                  | Action                  |
| ---------------- | -------------------------------------------- | ----------------------- |
| `low`            | ログイントランザクションが、そのユーザーにこれまで見られたパターンと一致しません。    | MFA を要求します。             |
| `medium`         | ログイントランザクションが、そのユーザーにこれまで見られたパターンとある程度一致します。 | MFA は要求されません。           |
| `high`           | ログイントランザクションが、そのユーザーにこれまで見られたパターンとよく一致します。   | MFA は要求されません。           |
| `neutral`        | 該当なし。将来の利用のために予約されています。                      | 該当なし。将来の利用のために予約されています。 |

<Accordion title="異なる信頼度スコアにおける高リスクおよび低リスクのシナリオ例を表示します。">
  次の表は、`low` の信頼度スコアとなる高リスクのシナリオを示しています。

  | User State | Desired Login Friction | Desired Enrollment Policy | Implementation                      |
  | ---------- | ---------------------- | ------------------------- | ----------------------------------- |
  | MFA に登録済み  | MFA を要求しない             | 該当なし (ユーザーはすでに登録済み)       | Action を使用して MFA を回避                |
  | MFA に未登録   | メール確認を要求する             | 登録をスキップする (追加の認証器は収集しない)  | デフォルトの動作 (MFA 関連の Action なし)        |
  | MFA に未登録   | メール確認を要求する             | MFA 登録を要求する (追加の認証器を収集する) | Action を使用して MFA 登録を強制する (テンプレートあり) |

  次の表は、`high` の信頼度スコアとなる低リスクのシナリオを示しています。

  | User State | Desired Login Friction | Desired Enrollment Policy | Implementation                      |
  | ---------- | ---------------------- | ------------------------- | ----------------------------------- |
  | MFA に登録済み  | 追加の手順なし                | 該当なし (ユーザーはすでに登録済み)       | デフォルトの動作 (MFA 関連の Action なし)        |
  | MFA に未登録   | 追加の手順なし                | 登録をスキップする (追加の認証器は収集しない)  | デフォルトの動作 (MFA 関連の Action なし)        |
  | MFA に未登録   | 追加の手順なし                | MFA 登録を要求する (追加の認証器を収集する) | Action を使用して MFA 登録を強制する (テンプレートあり) |
</Accordion>

異なるシナリオにおける総合的な信頼度スコアを評価する独自の方法を実装したい場合は、総合的な信頼度スコア、バージョニング情報、および各評価の詳細を含む `riskAssessment` オブジェクトで利用可能なデータを使用できます。

`riskAssessment` オブジェクトの完全な説明、プロパティ、値については、[post-login Actions トリガー `riskAssessment` リファレンス](/docs/ja-jp/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-event-object#param-risk-assessment)を参照してください。

<div id="action-result-outcomes">
  ## Action の結果パターン
</div>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  MFA をトリガーする Actions は、デフォルトの Adaptive MFA の動作よりも優先されます。
</Callout>

お使いの Actions のいずれかが 信頼度スコア に基づいて MFA をトリガーする場合、デフォルトの Adaptive MFA ポリシーでは、信頼度スコア が `low` のときに MFA がトリガーされます。

次の表は、Actions とデフォルトの Adaptive MFA ポリシーの動作の組み合わせごとに、どのような結果になるかを示しています。

| Action の結果 | Adaptive MFA の動作 | 結果        |
| ---------- | ---------------- | --------- |
| 未許可        | MFA をトリガー        | 未許可       |
| 未許可        | MFA は不要          | 未許可       |
| MFA をトリガー  | MFA をトリガー        | MFA をトリガー |
| MFA をトリガー  | MFA は不要          | MFA をトリガー |
| MFA は不要    | MFA をトリガー        | MFA をトリガー |
| MFA は不要    | MFA は不要          | MFA は不要   |

<div id="action-templates">
  ## Action テンプレート
</div>

Auth0 では、カスタマイズ可能な Adaptive MFA ベースの Action テンプレートとして、[Adaptive MFA](#adaptive-mfa-template) と [MFA 登録を必須にする](#require-mfa-enrollment-template) の 2 つを提供しています。

<div id="adaptive-mfa-template">
  ### Adaptive MFA テンプレート
</div>

このテンプレートは、個々のリスク評価を使用してカスタムのビジネスフローを構築する方法の例と、その出発点を示します。この例では、次を使用します。

* [`api.multifactor.enable`](/docs/ja-jp/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-api-object#api-multifactor) Action トリガー。これにより、ログインフローの最後に登録の処理と、設定済みの MFA チャレンジ の提示の両方を行います。
* ユーザーが登録済みの認証要素を含む、[`event.user.multifactor`](/docs/ja-jp/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-event-object) Actions トリガー。

```javascript lines expandable theme={null}
/**
* Post-Loginフローの実行中に呼び出されるハンドラー。
*
* @param {Event} event - ユーザーおよびログインコンテキストに関する詳細情報。
* @param {PostLoginAPI} api - ログインの動作を変更するために使用できるメソッドを持つインターフェース。
*/
exports.onExecutePostLogin = async (event, api) => {
    // MFAをトリガーする信頼度スコアを決定します。詳細については以下を参照してください。
    const promptConfidences = ['low', 'medium'];

    // 条件の例: NewDeviceの信頼度レベルのみに基づいてMFAを要求します。
    // これにより、ユーザーが未知のデバイスからログインした場合に
    // MFAが要求されます。
    const confidence =
        event.authentication?.riskAssessment?.assessments?.NewDevice
            ?.confidence;
    const shouldPromptMfa =
        confidence && promptConfidences.includes(confidence);

    // MFAを要求するのは、ユーザーが少なくとも1つの登録済みMFA認証要素を
    // 持っている場合に限ります。
    const canPromptMfa =
        event.user.multifactor && event.user.multifactor.length > 0;
    if (shouldPromptMfa && canPromptMfa) {
        api.multifactor.enable('any', { allowRememberBrowser: true });
    }
};
```

ユーザーに求めるには、`api.multifactor.enable` を `api.authentication.challengeWithAny()` に置き換えて、ユーザーがすでに登録している認証要素で MFA チャレンジを強制します。Actions でサポート対象の認証要素を確認するには、[`factors` パラメータ](https://auth0.com/docs/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-api-object#api-authentication-challengewithany-factors)をご覧ください。例:

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  この例では、登録状況を確認するために `event.user.multifactor` ではなく `event.user.enrolledFactors` を使用しています。`event.user.multifactor` とは異なり、`event.user.enrolledFactors` には認証要素として `email` も含まれるため、メールのみを設定しているユーザーについても、登録済みの認証要素を正しく返します。
</Callout>

```javascript theme={null}
// MFAを要求するのは、ユーザーが少なくとも1つの登録済みMFA認証要素を
// 持っている場合に限ります。
const canPromptMfa = event.user.enrolledFactors && event.user.enrolledFactors.length > 0;

if (shouldPromptMfa && canPromptMfa) {
    api.authentication.challengeWithAny([ {type: "email"}, {type:"phone"} ]);
}
```

<div id="require-mfa-enrollment-template">
  ### MFA登録を必須にするテンプレート
</div>

このテンプレートでは、標準のポリシーまたはAdaptive MFAポリシーを使用する際に、MFA登録を必須にする方法を示します。`event.user.multifactor`を使ってユーザーがMFAに登録済みかどうかを確認し、未登録の場合は登録を求めるプロンプトを表示します。

```javascript lines theme={null}
/**
* PostLogin フローの実行中に呼び出されるハンドラー。
*
* @param {Event} event - ユーザーおよびログインコンテキストに関する詳細情報。
* @param {PostLoginAPI} api - ログインの動作を変更するために使用できるメソッドを持つインターフェース。
*/
exports.onExecutePostLogin = async (event, api) => {
    if (!event.user.multifactor?.length) {
        api.multifactor.enable('any', { allowRememberBrowser: false });
    }
};
```

<div id="action-use-cases">
  ## Action のユースケース
</div>

ユースケースに応じてカスタム Actions を構築する際の例をいくつか紹介します。

<AccordionGroup>
  <Accordion title="全体の信頼度スコアが X の場合にアクションを実行する">
    `riskAssessment.confidence` プロパティを確認し、`high`、`medium`、`low` の定数と比較します。

    ```js lines theme={null}
    exports.onExecutePostLogin = async (event, api) => {
      const { riskAssessment } = event.authentication || {};
      const riskIsMedium = riskAssessment && riskAssessment.confidence === 'medium';

      if (riskIsMedium) {
        // ....
      }
    }
    ```
  </Accordion>

  <Accordion title="信頼度スコアが X より高い、または低い場合にアクションを実行する">
    信頼度スコアは範囲ではなく離散値のため、比較演算子 (`<` や `>` など) を使って 1 つの条件で複数の値を評価することはできません。

    対応したい信頼度スコアを論理的に組み合わせるには、複数の条件を使用します。たとえば、信頼度スコアが `low` より高い場合を判定するには、`medium` または `high` と等しいかどうかを確認します。

    ```js lines theme={null}
    exports.onExecutePostLogin = async (event, api) => {
      const { riskAssessment } = event.authentication || {};
      const riskIsMediumOrHigh = riskAssessment && 
                                      (riskAssessment.confidence === 'high' || 
                                       riskAssessment.confidence === 'medium');

      if (riskIsMediumOrHigh) {
        // ...
      }
    }
    ```
  </Accordion>

  <Accordion title="全体の信頼度スコアが X の場合に追加の詳細を取得する">
    `riskAssessment` オブジェクトはテナントログに保存されます。ログエントリを確認すると、リスク評価スコアとその判定要因 (理由) を確認できます。

    また、`riskAssessment` オブジェクトを参照して、その結果を別の場所に報告することもできます。たとえば、メールを送信したり、外部データベースにレコードを保存したりできます。

    ```js lines theme={null}
    exports.onExecutePostLogin = async (event, api) => {
      const { riskAssessment } = event.authentication || {};
      const riskIsLow = riskAssessment && riskAssessment.confidence === 'low';

      if (riskIsLow) {
        // log(externalDatabase, riskAssessment);
      }
    }
    ```
  </Accordion>

  <Accordion title="特定の 評価 が特定の結果を返した場合にアクションを実行する">
    各 評価 の詳細 (`code` プロパティを含む) にアクセスするには、[`assessments` object](/docs/ja-jp/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-event-object#param-assessments) を使用します。

    ```js lines theme={null}
    exports.onExecutePostLogin = async (event, api) => {
      const { riskAssessment } = event.authentication || {};
      const { ImpossibleTravel } = riskAssessment && riskAssessment.assessments;

      if (ImpossibleTravel.code === 'impossible_travel_from_last_login') {
        // ...
      }
    }
    ```
  </Accordion>

  <Accordion title="カスタムの全体信頼度スコアのために 評価 を集約する。">
    各 評価 の詳細にアクセスするには、[`assessments` object](/docs/ja-jp/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-event-object#param-assessments) を使用し、`confidence` プロパティ、`code` プロパティ、またはその両方を利用します。
  </Accordion>

  <Accordion title="特定の 評価 が特定の結果を返した場合、現在のトランザクションをブロックしてエラーとメッセージを返す">
    各 評価 の詳細 (`code` プロパティを含む) にアクセスするには、[`assessments` object](/docs/ja-jp/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-event-object#param-assessments) を使用します。

    エラーパラメータとして `UnauthorizedError` オブジェクトを指定してコールバック関数を返すことで、ログイントランザクションが完了しないようブロックできます。`UnauthorizedError` オブジェクトでは `error` は常に `unauthorized` に設定されますが、`error_message` はカスタマイズできます。

    ```js lines theme={null}
    exports.onExecutePostLogin = async (event, api) => {
      const { riskAssessment } = event.authentication || {};
      const { ImpossibleTravel } = riskAssessment && riskAssessment.assessments;

      if (ImpossibleTravel.code === 'impossible_travel_from_last_login') {
        return api.access.deny('Login blocked due to impossible travel detected.')
      }
    }
    ```

    これにより、ユーザーは `error` と `error_message` パラメータを含んだ状態で、アプリケーションのコールバック URL にリダイレクトされます。
  </Accordion>

  <Accordion title="Auth0 が 評価 の実行に失敗した場合でも安全に処理する">
    リスク評価の実行中に何らかの障害が発生した場合、Auth0 は自動的に `low` の信頼度スコアを割り当てます。

    この状況に対処するには、[`assessments` object](/docs/ja-jp/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-event-object#param-assessments) を使用して各 評価 の `code` プロパティを確認し、値が `assessment_not_available` に設定されているかどうかを確認します。
  </Accordion>
</AccordionGroup>

<div id="learn-more">
  ## 詳細情報
</div>

* [Adaptive MFA を有効にする](/docs/ja-jp/secure/multi-factor-authentication/adaptive-mfa/enable-adaptive-mfa)
* [Adaptive MFA のログイベント](/docs/ja-jp/secure/multi-factor-authentication/adaptive-mfa/adaptive-mfa-log-events)
* [Actions トリガー: post-login - API オブジェクト](/docs/ja-jp/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-api-object)
* [Actions トリガー: post-login - イベントオブジェクト](/docs/ja-jp/customize/actions/explore-triggers/signup-and-login-triggers/login-trigger/post-login-event-object)
