> ## Documentation Index
> Fetch the complete documentation index at: https://docs-dev-docs-event-stream-action-templates.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# サンプルユースケース：パスワードレス認証を使用したルール

> パスワードレス接続を用いたルールの例を説明します。

<Warning>
  RulesとHooksのサポート終了（EOL）日は **2026年11月18日** であり、 **2023年10月16** 日の時点で作成された新しいテナントは使用できなくなります。Hooksが有効な既存のテナントは、サポート終了までHooksを利用できます。

  今後はActionsに移行して、Auth0の機能を拡張することを強くお勧めします。Actionsを使用すると、豊富な情報やインラインドキュメント、パブリック`npm`パッケージにアクセスして、外部統合を使って全体的な拡張エクスペリエンスを強化することができます。Actionsの詳細については、「[Auth0 Actionsの仕組みを理解する](/docs/ja-jp/customize/actions/actions-overview)」をお読みください。

  当社では、移行の参考資料として、[RulesからActionsへの移行](/docs/ja-jp/customize/actions/migrate/migrate-from-rules-to-actions)と[HooksからActionsへの移行](/docs/ja-jp/customize/actions/migrate/migrate-from-hooks-to-actions)に関するガイドを提供しています。また、専用の「[Actionsへの移行](https://auth0.com/extensibility/movetoactions)」ページでは、機能の比較や[Actionsのデモ](https://www.youtube.com/watch?v=UesFSY1klrI)、その他のリソースを掲載して、円滑な移行をサポートしています。

  RulesとHooksの廃止の詳細については、当社のブログ記事「[RulesとHooksの提供終了について](https://auth0.com/blog/preparing-for-rules-and-hooks-end-of-life/)」をお読みください。
</Warning>

[ルール](/docs/ja-jp/customize/rules)を使用すると、[パスワードレス接続](/docs/ja-jp/authenticate/passwordless)だけを使うよりも複雑な状況が扱えるようになります。たとえば、メールアドレスやデバイスの所有を確実にするために、さらに対策を追加することができます。

## 企業ネットワーク外部のユーザーに多要素認証を要求する

企業ネットワークの外部からパスワードレス接続を使ってアプリケーションにアクセスしているユーザーに、[多要素認証（MFA）](/docs/ja-jp/secure/multi-factor-authentication)を必須にしたいとします。

ルールを使用すると、ユーザーがパスワードレス方式（`sms`、`email`）を使って認証しているかどうかを確認し、セッションIPが指定の企業ネットワーク外だった場合に、第二認証要素を求めることができます。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  このルールは、現在のIPがユーザーのIP許可リストに一致しているか、ユーザーの位置情報がユーザープロファイルに記載されている国と異なっていないかなど、他の条件に基づいてトリガーすることもできます。
</Callout>

これを行うには、[以下のルールを作成](/docs/ja-jp/customize/rules/create-rules)します。

```javascript lines theme={null}
function(user, context, callback) {
  const ipaddr = require('ipaddr.js');
  const corp_network = "192.168.1.134/26";
  const current_ip = ipaddr.parse(context.request.ip);
  // is auth method passwordless and IP outside corp network?
  const passwordlessOutside = context.authentication.methods.find(
    (method) => (
      ((method.name === 'sms') || (method.name === 'email')) && 
      (!current_ip.match(ipaddr.parseCIDR(corp_network)))
    )
  );

  // if yes, then require MFA
  if (passwordlessOutside) {
    context.multifactor = {
      provider: 'any',
      allowRememberBrowser: false
    };
  }
  callback(null, user, context);
}
```
