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

# データベース接続でのパスワードレス認証

> 新規または既存のデータベース接続で、完全なパスワードレス認証を設定する方法について説明します。

export const ReleaseStageNotice = ({feature, stage, plans, contact, terms}) => {
  const stageTextMap = {
    "beta": "ベータ",
    "ea": "早期アクセス"
  };
  const stageText = stageTextMap[stage] || "製品リリース段階";
  const prsLink = "/docs/troubleshoot/product-lifecycle/product-release-stages";
  const linkify = (text, url) => {
    return <a href={url} target="_blank" rel="noreferrer" class="link">{text}</a>;
  };
  const includeDetails = (plans, contact, terms) => {
    const hasDetails = terms || plans || contact;
    if (!hasDetails) return null;
    return <span data-as="p">
            {plans && <>この機能は、{linkify(`${plans}プラン`, "https://auth0.com/pricing")}で利用できます。 </>}
            {contact && "参加するには、" + contact + " までお問い合わせください。 "}
            {terms && <>この機能を使用すると、Okta の{linkify("Master Subscription Agreement", "https://www.okta.com/legal")}に定める該当する無料トライアル条件に同意したものとみなされます。</>}
        </span>;
  };
  return <Warning>
            <span data-as="p">
                <strong>{feature} 機能は現在、{linkify(stageText, prsLink)}です。</strong>
            </span>

            {includeDetails(plans, contact, terms)}
        </Warning>;
};

<ReleaseStageNotice feature="データベース接続でのパスワードレス認証" stage="ea" contact="support" terms="true" />

Auth0 では、[データベース接続](/ja/docs/authenticate/database-connections)で、メールアドレスおよび電話番号を使用したパスワードレス認証を直接設定できます。OTP 認証用に別個の接続を作成しなくても、データベース接続から直接パスワードレスログインを提供できます。これにより、実装の複雑さが軽減され、エンドユーザーのログイン体験もシンプルになります。

<Callout icon="triangle-exclamation" color="#F59E0B" iconType="regular">
  データベース接続でのパスワードレス認証は、Classic Login ではサポートされていません。
</Callout>

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

Auth0 では、ユーザーを OTP 認証で検証する [Identifier-First Authentication](/ja/docs/authenticate/login/auth0-universal-login/identifier-first) アプローチを採用しています。

1. エンドユーザーが、[Auth0 の Universal Login](/ja/docs/authenticate/login/auth0-universal-login) でログインに使用する識別子を入力します。
2. Auth0 は、データベース接続で設定された各識別子に対応する認証方法を確認します。
3. `default_method` と利用可能な認証方法に基づいて、ユーザーに最も適した選択肢が提示されます (たとえば、メールアドレスまたは電話番号で OTP を受け取る、またはパスワードを入力するなど) 。
4. OTP が選択された認証方法である場合、Auth0 はユーザーのメールアドレスまたは電話番号にコードを送信します。
5. ユーザーがコードを入力すると認証されます。パスキーを設定している場合は、段階的なパスキー登録を求められます。

<Card title="開始する前に">
  * テナントが [Identifier-First Authentication Profile](https://auth0.com/docs/authenticate/login/auth0-universal-login/identifier-first) を使用するように設定します。
  * 電話番号ベースの OTP (SMS または音声) を使用する予定がある場合は、[**Branding > Phone Provider**](https://manage.auth0.com/#/phone/templates/phone/provider) で [Unified Phone Experience](/ja/docs/customize/phone-messages/unified-phone/configure-unified-phone) 設定を有効にする必要があります。
  * データベース接続で [属性](/ja/docs/authenticate/database-connections/activate-and-configure-attributes-for-flexible-identifiers) を有効にする必要があります。
  * 既存の (レガシー) パスワードレス接続を、データベース接続でのパスワードレス認証と併用する予定で、かつ既存のパスワードレス接続で Unified Phone Provider を使用するよう設定したくない場合:
    1. [**Auth0 Dashboard > Authentication > Passwordless**](https://manage.auth0.com/#/connections/passwordless) に移動します。
    2. SMS の **Configure** を選択します。
    3. **Use Tenant-Level Messaging Provider** 設定が無効になっていることを確認します。
</Card>

<div id="configure-attributes-identifiers">
  ## 属性 (識別子) を設定する
</div>

データベース接続でメールアドレスまたは電話番号ベースのパスワードレス認証を設定する場合は、まず、サインアップ時とログイン時にエンドユーザーに入力してもらう属性を決定する必要があります。

識別子の種類と、それぞれに対応する認証方法を確認してください。

| 識別子      | 認証方法                   |
| -------- | ---------------------- |
| メールアドレス  | パスワード、メールアドレス OTP、パスキー |
| 電話番号     | パスワード、電話番号 OTP、パスキー    |
| username | パスワード                  |

メールアドレス識別子および電話番号識別子では、パスワードが**有効になっていない**場合、サインアップ時の OTP 検証を有効にしておく必要があります。メールアドレス属性と電話番号属性は、サインアップ時に任意項目として設定できるため、ユーザーはメールアドレスのみ、または電話番号のみでサインアップできます。

ユーザーがメールアドレス OTP で認証すると、プロフィールの `email_verified` は自動的に `true` に設定されます。ユーザーが電話番号 OTP で認証すると、`phone_verified` は自動的に `true` に設定されます。

<Warning>
  エンドユーザーにパスキーで認証させる場合は、メールアドレスや電話番号などの代替の認証方法を**必ず**設定しておく必要があります。パスキーのみの認証はサポートされていません。
</Warning>

詳しくは、[柔軟な識別子向けの属性を有効化して設定する](/ja/docs/authenticate/database-connections/activate-and-configure-attributes-for-flexible-identifiers)を参照してください。

<div id="create-a-new-database-connection">
  ## 新しいデータベース接続を作成する
</div>

既存のデータベース接続がない場合は、Auth0 Dashboard または Management API を使用して作成します。

<Tabs>
  <Tab title="Auth0 Dashboard" icon="browser">
    1. [**Auth0 Dashboard > Authentication > Database**](https://manage.auth0.com/#/connections/database) に移動します。接続を作成するには、**Create DB Connection** を選択します。
    2. 接続に一意の名前を入力します。
    3. エンドユーザーがログインまたはサインアップに使用する属性を 1 つ以上選択します。
    4. 認証方法を選択します。これらの認証方法は、接続の作成後にさらに設定できます。
    5. 公開エンドポイントを使用したユーザーのサインアップを許可しない場合は、**Disable Sign Ups** をオンにします。
    6. この接続をサードパーティアプリケーションで使用する場合は、**Promote Connection to Domain Level** をオンにします。
    7. **Create** を選択します。

    完全なパスワードレス接続にするには、さらに次の手順を実行します。

    1. 新しい接続で、**Attributes** タブを選択します。
    2. 識別子として Username を無効にするには、**Configure** を選択し、**Use Username as Identifier** をオフにします。
    3. Email と Phone の識別子を設定するには、**Configure** を選択します。

    * Email 属性では、Verification Methods の **One-Time Password (OTP)** を選択し、完全なパスワードレス構成にするため **Verify email on sign up** を有効にします。これにより `email_verified` が自動的に設定されるため、ユーザーにはログイン時とサインアップ時に常に OTP の入力が求められます。

    4. **Save** を選択します。

    5. 選択した識別子に対応する認証方法を設定します。`phone_otp` および/または `email_otp` が設定されていない場合は、パスワードを無効にできません。

    6. Password settings で **Policy** を選択し、次の項目に対して **Block** を選択します。

       * Password on Login
       * Password on Signup
       * Self-service change password (自動更新)

    7. **Support users without a password** をオンにします。
           <Warning>
             **Support users without a password** をオンにしないと、エラーが発生する場合があります。
           </Warning>

    8. **Save** を選択します。表示されたプロンプトで **Continue** を選択し、既存のユーザーに影響が及ぶ可能性があることを確認します。

    9. **Applications** タブに移動し、アプリケーションまたは API でこの接続を有効にします。
  </Tab>

  <Tab title="Management API" icon="code">
    <Callout icon="file-lines" color="#0EA5E9" iconType="regular">
      Management API を使用するには、[Management API アクセストークン](/ja/docs/secure/tokens/access-tokens/management-api-access-tokens/get-management-api-access-tokens-for-production) が必要です。
    </Callout>

    [Create a Connection](https://auth0.com/docs/api/management/v2/connections/post-connections) エンドポイントを呼び出します。各識別子の最初の認証方法を設定するには、`default_method` オプションを使用します。

    ```bash expandable lines theme={null}
    curl --location 'https://YOUR_AUTH0_TENANT/api/v2/connections' \
    --header 'Authorization: Bearer YOUR_MANAGEMENT_API_TOKEN' \
    --header 'Accept: application/json, text/plain, */*' \
    --header 'Content-Type: application/json' \
    --data '{
      "name": "YOUR_CONNECTION_NAME",
      "strategy": "auth0",
      "is_domain_connection": false,
      "options": {
        "disable_signup": false,
        "attributes": {
          "email": {
            "identifier": {
              "active": true,
              "default_method": "email_otp"
            },
            "profile_required": true,
            "signup": {
              "status": "required",
              "verification": {
                "active": true
              }
            },
            "verification_method": "otp",
            "unique": true
          },
          "phone_number": {
            "identifier": {
              "active": true,
              "default_method": "password"
            },
            "profile_required": true,
            "signup": {
              "status": "required",
              "verification": {
                "active": true
              }
            }
          },
          "username": {
            "identifier": {
              "active": true
            },
            "profile_required": true,
            "signup": {
              "status": "required"
            },
            "validation": {
              "min_length": 1,
              "max_length": 15,
              "allowed_types": {
                "email": false,
                "phone_number": false
              }
            }
          }
        },
        "authentication_methods": {
          "password": {
            "enabled": true
          },
          "passkey": {
            "enabled": false
          },
          "email_otp": {
            "enabled": true
          },
          "phone_otp": {
            "enabled": true
          }
        }
      }
    }'
    ```
  </Tab>
</Tabs>

<div id="update-existing-connections">
  ## 既存の接続を更新する
</div>

既存のデータベース接続がある場合は、Auth0 Dashboard または Management API でパスワードレスの設定を更新します。

<Tabs>
  <Tab title="Auth0 Dashboard" icon="browser">
    1. **接続を開く**: [**Auth0 Dashboard > Authentication > Database**](https://manage.auth0.com/#/connections/database) に移動し、更新する接続を選択します。
    2. **Attributes を有効にする**: **Attributes** タブで **Activate** を選択し、新しい Attributes Configuration を有効にします。
    3. **メールアドレス属性と電話番号属性を追加する**: **+ Add Attributes** を選択し、まだ追加されていない場合は Email と Phone Number を追加します。

           <Callout icon="file-lines" color="#0EA5E9" iconType="regular">
             完全なパスワードレス (OTP) 接続では、username 識別子はサポートされていません。
           </Callout>
    4. **OTP 認証方法を有効にする**: **Authentication Methods** タブで次の操作を行います。
       * Phone を **Allow** Phone OTP に設定し、変更を保存します。
       * Email を **Allow** Email OTP に設定し、変更を保存します。
    5. **パスワード認証をブロックする**: Password 設定で **Policy** を選択し、次の項目を **Block** に設定します。

       * Login での Password
       * Signup での Password
       * セルフサービスでのパスワード変更

       **Support users without a password** をオンにします。

           <Warning>
             **Support users without a password** をオンにしないと、エラーが発生する場合があります。
           </Warning>
    6. **保存**: **Save** を選択します。
  </Tab>

  <Tab title="Management API" icon="code">
    <Callout icon="file-lines" color="#0EA5E9" iconType="regular">
      Management API を使用するには、[Management API アクセストークン](/ja/docs/secure/tokens/access-tokens/get-management-api-access-tokens-for-production) が必要です。
    </Callout>

    [Update a Connection](https://auth0.com/docs/api/management/v2/connections/patch-connections-by-id) エンドポイントを呼び出します。最初の認証方法を設定するには、`default_method` オプションを追加します。Email 属性には `password` または `email_otp` を設定します。Phone 属性には `password` または `phone_otp` を設定します。

    ```bash theme={null}
    curl -L -X PATCH "https://YOUR_AUTH0_TENANT/api/v2/connections/<connection_id>" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer YOUR_MANAGEMENT_API_TOKEN" \
    -d '{
      "options": {
        "passwordPolicy": "none",
        "authentication_methods": {
          "password": { "enabled": true },
          "passkey": { "enabled": true },
          "email_otp": { "enabled": true },
          "phone_otp": { "enabled": true }
        },
        "attributes": {
          "email": {
            "signup": {
              "status": "required",
              "verification": { "active": true }
            },
            "unique": true,
            "identifier": {
              "active": true,
              "default_method": "email_otp"
            },
            "profile_required": true,
            "verification_method": "otp"
          },
          "phone_number": {
            "signup": {
              "status": "required",
              "verification": { "active": true }
            },
            "identifier": {
              "active": true,
              "default_method": "phone_otp"
            },
            "profile_required": true
          }
        }
      }
    }'
    ```
  </Tab>
</Tabs>

<div id="use-auth0-actions">
  ## Auth0 Actions を使用する
</div>

データベース接続のパスワードレス認証要素に関する詳細情報を得るには、Auth0 Actions を使用して属性を設定します。

<div id="post-login-trigger">
  ### Post-login トリガー
</div>

`post-login` トリガーは、ユーザーの認証後、認可サーバーがトークンを返す前に実行されます。[Auth0 Dashboard > Actions > Triggers > Post Login](https://manage.auth0.com/#/actions/flows) の `event.authentication` オブジェクトでは、次のメソッドを利用できます。

| メソッド            | パラメーター  | 説明                                   |
| --------------- | ------- | ------------------------------------ |
| メールアドレス OTP     | `email` | ユーザーの第 1 要素の認証に使用されるメール OTP。         |
| SMS による電話番号 OTP | `sms`   | ユーザーの第 1 要素の認証に使用される電話番号 OTP (SMS) 。 |
| 音声による電話番号 OTP   | `tel`   | ユーザーの第 1 要素の認証に使用される音声による電話番号 OTP。   |
| パスワード           | `pwd`   | ユーザーの第 1 要素の認証に使用されるパスワード。           |

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  ユーザーがメールアドレス OTP または電話番号 OTP で認証されると、`email_verified` と `phone_verified` はユーザープロファイルに自動的に設定されます。以前、これらのフラグを手動で設定するために post-login Action を使用していた場合は、そのワークアラウンドを削除できます。
</Callout>

`event.authentication` を使用して、次のことができます。

* ユーザーが完了したパスワードレス認証要素 (`email`、`sms`、`tel`、または `pwd`) を検出する
* 認証方法に基づいてトークンにカスタムクレームを追加する
* ユーザーの認証方法に応じて条件付きでロジックを実行する

<div id="example">
  #### 例
</div>

次の例では、`event.authentication.methods` を参照して、ユーザーが完了したパスワードレスの認証要素を検出し、それを IDトークン のカスタムクレームとして追加します。

```javascript theme={null}
exports.onExecutePostLogin = async (event, api) => {
  if (!event.authentication?.methods || event.authentication.methods.length === 0) {
    return;
  }

  if (event.connection.name !== 'YOUR_AUTH0_CONNECTION') {
    return;
  }

  const firstFactor = event.authentication.methods[0];

  if (firstFactor.name === 'email') {
    api.idToken.setCustomClaim('https://your-app.com/auth_method', 'email_otp');
  } else if (firstFactor.name === 'sms' || firstFactor.name === 'tel') {
    api.idToken.setCustomClaim('https://your-app.com/auth_method', 'phone_otp');
  } else if (firstFactor.name === 'pwd') {
    api.idToken.setCustomClaim('https://your-app.com/auth_method', 'password');
  }
};
```

<div id="post-challenge-trigger">
  ### Post-challenge トリガー
</div>

`post-challenge` トリガーは、ユーザーがパスワードリセット、電話番号の検証、MFA などのチャレンジを完了した後に発火します。[Auth0 Dashboard > Actions > Triggers > password-reset-post-challenge](https://manage.auth0.com/#/actions/flows) の `event.authentication` オブジェクトでは、次の属性を利用できます。

| 属性      | パラメーター         | 説明                                       |
| ------- | -------------- | ---------------------------------------- |
| メールアドレス | `email`        | メールアドレス宛ての OTP またはマジックリンクを使用したパスワードリセット。 |
| 電話番号    | `phone_number` | 電話番号宛ての OTP を使用したパスワードリセット。              |

<div id="example">
  #### 例
</div>

次の例では、`event.authentication.methods` を読み取って、どのパスワードレス認証要素でチャレンジが完了したかを判別し、それをIDトークンのカスタムクレームとして追加します。

```javascript theme={null}
exports.onExecutePostChallenge = async (event, api) => {
  if (!event.authentication?.methods || event.authentication.methods.length === 0) {
    return;
  }

  if (event.connection.name !== 'YOUR_AUTH0_CONNECTION') {
    return;
  }

  const firstFactor = event.authentication.methods[0];

  if (firstFactor.name === 'email') {
    api.idToken.setCustomClaim('https://your-app.com/challenge_method', 'email_otp');
  } else if (firstFactor.name === 'phone_number') {
    api.idToken.setCustomClaim('https://your-app.com/challenge_method', 'phone_otp');
  }
};
```

<div id="benefits">
  ## 利点
</div>

* **実装の簡素化:** 設定や管理が必要な接続の数を減らせます。データベース接続と併せてソーシャル/フェデレーション接続を使用しない限り、アカウントリンクは必要ありません。
* **ユーザー体験の向上**: Universal Login の同一の識別子ファースト体験で、メールアドレスや電話番号ベースの OTP、パスワード、パスキー、ソーシャル/フェデレーションログインを組み合わせて提供できます。
* **柔軟なサインアップフロー**: サインアップ時にメールアドレス属性と電話番号属性を任意に設定できるため、ユーザーはメールアドレスのみ、または電話番号のみでサインアップできます。モバイルファーストやメールアドレスのみの体験に最適です。
* **音声 OTP**: Unified Phone Experience で設定すると、音声 OTP を第 1 要素として含めることができます。

<div id="limitations">
  ## 制限事項
</div>

* Universal Login ベースのフローでのみ使用できます。API ベースの認証はまだサポートされていません。
* データベース接続のパスワードレスは、Classic Login ではサポートされていません。
* データベース接続のパスワードレスでは、Implicit Signup & Login はサポートされていません。
* 従来のパスワードレス接続では、サインアップとログインでユーザー体験に違いはありませんでした。データベース接続ではサインアップ時とログイン時の体験が区別されるため、*明示的に*サインアップまたはログインする必要があります。
  * Auth0 アイデンティティを持たないユーザーがログインフローに入った場合、自動的にサインアップされることはありません。OTP の検証後にエラーが返されます。
  * Auth0 アイデンティティを持つユーザーがサインアップフローに入った場合は、OTP の検証後にエラーが返されます。

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

* [パスワードレス認証](/ja/docs/authenticate/passwordless)
* [パスワードレス接続の制限事項](/ja/docs/authenticate/passwordless/passwordless-connection-limitations)
* [パスワードレス接続のベストプラクティス](/ja/docs/authenticate/passwordless/best-practices)
* [柔軟な識別子の属性を有効にして設定する](/ja/docs/authenticate/database-connections/activate-and-configure-attributes-for-flexible-identifiers)
