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

# エンドユーザー認証：サインイン、パスキー、セッション管理

> Didit認証を使えば、ホスト型ページ、パスキー、ワンタイムコード、ソーシャルログイン、SSOでエンドユーザーのサインインを追加し、本人確認や取引モニタリングと連携できます。

> [!WARNING]
>
> Authenticationは新しい機能です。Diditがお客様のアプリケーションに対してこのプロダクトを有効化します。有効化されるまで、そのアプリケーションのすべてのランタイムルートは`404`を返します。Authentication SDKのパッケージはまだ公開されていないため、ホスト型フローとこれらのページに記載されたHTTPの仕様をご利用ください。

Authenticationは、お客様の顧客を**お客様のアプリケーション**にサインインさせる機能です。Diditコンソールへのサインインや、Didit開発者アカウントの作成とは別のものです。また、人物の本人確認とも別のものです。

Authenticationは単独で使うことも、本人確認やトランザクションモニタリングと組み合わせて使うこともできます。サインインによって本人確認が承認されたり、支払いが許可されたりすることはありません。これらの判定は、お客様のバックエンドが各プロダクトの結果に基づいて行います。

## 仕組み

各アプリケーションには、専用のサインインオリジンと専用のトークン発行者が割り当てられます。本番環境のアプリケーションとサンドボックスのアプリケーションは別々であり、オリジン、設定、アイデンティティもそれぞれ独立しています。

| 項目 | 値 |
| - | - |
| デフォルトのオリジン | 本番環境のアプリケーションでは`https://<slug>.auth.didit.me`、サンドボックスのアプリケーションでは`https://<slug>.sandbox.auth.didit.me`です。お客様のオリジンはコンソールに表示されます。検証済みのカスタムドメインに置き換えることもできます。 |
| ホスト型ページ | そのオリジン上の`/sign-in`、`/magic`、`/invite`、`/reset`です。 |
| ランタイムAPI | 同じオリジンです。例: `POST {origin}/token/`、`GET {origin}/session/`。 |
| 発行者 | オリジンそのものです。ディスカバリーは`{origin}/.well-known/openid-configuration`にあります。 |
| 公開可能キー | `pk_live_...`または`pk_test_...`です。アプリケーションを識別するためのもので、シークレットではありません。 |

フローはPKCE付きのOAuth 2.0認可コードフローです(`S256`のみ):

1. お客様のアプリが`redirect_uri`、`state`、`code_challenge`、`code_challenge_method=S256`を付けて`{origin}/sign-in`を開きます。
2. ホスト型ページが、お客様が有効にした方法で、必要な第2要素も含めて、ユーザーをサインインまたはサインアップさせます。
3. ブラウザが`code`と`state`を付けてお客様の`redirect_uri`に戻ります。
4. お客様のアプリが`POST {origin}/token/`でコードを交換し、アクセストークン、IDトークン、リフレッシュトークンを取得します。

トークンの仕様については[トークンとJWKS](https://docs.didit.me/ja/authentication/tokens-and-jwks.md)を、各方法については[サインイン方法](https://docs.didit.me/ja/authentication/sign-in-methods.md)をご覧ください。

## プラットフォームを選択する

> [card] [JavaScript](https://docs.didit.me/ja/authentication/quickstarts/javascript.md)
>
> ホスト型サインイン、コールバック、セッション、ログアウト。

> [card] [React](https://docs.didit.me/ja/authentication/quickstarts/react.md)
>
> クライアントの状態と保護されたアプリケーション画面。

> [card] [Next.js](https://docs.didit.me/ja/authentication/quickstarts/nextjs.md)
>
> サーバーセッション、コールバックルート、Cookie。

> [card] [iOS](https://docs.didit.me/ja/authentication/quickstarts/ios.md)
>
> システムブラウザと安全なトークン保存。

> [card] [Android](https://docs.didit.me/ja/authentication/quickstarts/android.md)
>
> ブラウザでの認可とアプリへのコールバック。

> [card] [React Native](https://docs.didit.me/ja/authentication/quickstarts/react-native.md)
>
> ネイティブ認証ラッパーの準備。

> [card] [Flutter](https://docs.didit.me/ja/authentication/quickstarts/flutter.md)
>
> ネイティブ認証ラッパーの準備。

## アプリケーションを準備する

1. お客様のアプリケーションでAuthenticationを有効にするようDiditに依頼してください。まずサンドボックスのアプリケーションでテストしてください。
2. 正確な[リダイレクトURL](#リダイレクトurl)(最大50件)と、ランタイムAPIを呼び出すブラウザの`allowed_origins`(最大50件)を登録します。
3. 提供したい[サインイン方法](https://docs.didit.me/ja/authentication/sign-in-methods.md)を有効にします。Didit ID Walletは常に有効です。
4. セッションとパスワードの設定を選択します(下記参照)。
5. 本番運用を開始する前に、サインアップ、サインイン、パスワードの再設定、MFA、セッションの有効期限切れ、ログアウトをテストしてください。

パスキーはそのオリジンに紐づきます。後からカスタムドメインを有効化した場合、ユーザーはパスキーを再登録する必要があります。

## リダイレクトURL

Diditは、お客様が登録したアドレスにのみユーザーを戻します。
コンソールの**Authentication > Security and sessions > Redirect URLs and allowed origins**で登録してください。

サインインリクエストの`redirect_uri`は、スキーム、ホスト、ポート、パス、クエリのすべてにおいて、登録済みのURLと1文字ずつ一致している必要があります。
ポートが異なる場合、末尾にスラッシュがある場合、大文字と小文字が異なる場合は、別のアドレスとして扱われます。

| アプリケーション | 登録できるもの |
| - | - |
| 本番環境 | `https://`のURL |
| サンドボックス | `https://`のURL、および`localhost`、`127.0.0.1`、`[::1]`上の`http://`のURL |

ワイルドカード、フラグメント、URL内の認証情報、カスタムスキームは拒否されます。

アドレスが登録されていない場合、Diditがそのアドレスにリダイレクトすることは決してありません。
`{origin}/sign-in`は、何をどこに登録すべきかを示すページとともに`400`を返し、`POST {origin}/authorize/`は`400 {"error": "invalid_redirect_uri"}`を返します。

### ローカル開発

サンドボックスのアプリケーションを使って、ご自身のマシンでテストします:

1. コールバックをポート付きで登録します。例: `http://localhost:3000/auth/callback`。
2. ブラウザのコードがランタイムAPIを呼び出す場合、たとえば`POST {origin}/token/`でコードを交換する場合は、そのオリジンも**Allowed origins**に追加します。パスや末尾のスラッシュを付けずに`http://localhost:3000`と指定してください。
3. `pk_test_...`キーを使って、サンドボックスのオリジン`https://<slug>.sandbox.auth.didit.me`でサインインを開始します。

`localhost`、`127.0.0.1`、`[::1]`はそれぞれ別のアドレスであり、ポートごとにも別のアドレスとして扱われます。
使用するものをそれぞれ登録してください。

本番環境のアプリケーションは`http://`を一切受け付けません。
本番運用を開始する前に、本番環境の`https://`コールバックを本番環境のアプリケーションに登録してください。

## アプリケーション設定

これらの設定は、コンソールで管理するか、`write:authentication`を持つ承認済みのコンソールセッションで管理します。

| 設定 | 値 | デフォルト |
| - | - | - |
| `session_lifetime` | `86400`、`604800`、`2592000`、`7776000`秒 | `2592000`(30日) |
| `idle_timeout` | `1800`、`7200`、`86400`、`604800`秒 | `86400`(1日) |
| `multiple_sessions` | `false`にすると、新しくサインインするたびにその人のほかのセッションからサインアウトさせます | `true` |
| `password_min_length` | `8`、`10`、`12`、`14` | `10` |
| `revoke_on_password_change` | パスワードのリセット後にすべてのセッションを終了します | `true` |
| `signup_policy` | `anyone`、`invited`、`allowed_domains`(`allowed_email_domains`と組み合わせて最大100件) | `anyone` |
| `allow_subaddresses` | メールアドレスのローカル部に`+`を含むものを受け付けます | `false` |
| `post_logout_redirect_uri` | サインアウト後にアプリがその人をリダイレクトする先 | 空 |
| `mfa_policy` | `optional`、`everyone`、`organization_admins` | `organization_admins` |
| `sign_in_ui` | `hosted`または`own` | `hosted` |

## 製品をまたいで同じ人物として扱う

すべてのアイデンティティは`vendor_data`の値を持ちます。これは、その人を[インポート](https://docs.didit.me/ja/authentication/migration.md)したときに指定した`external_id`で、指定していない場合はDiditのアイデンティティIDです。この値はアクセストークン、IDトークン、`GET session/`に含まれます。

検証セッションの作成時や取引の送信時には、同じ値を`vendor_data`として使用してください。これにより、認証イベントがコンソール上で、その人の検証や取引と同じ人物に紐づきます。詳しくは[イベントとWebhook](https://docs.didit.me/ja/authentication/events-and-webhooks.md)を参照してください。

`vendor_data`は、検証済みのトークンからバックエンドで導出してください。未検証のブラウザのフィールドから取得してはいけません。

| 製品の組み合わせ | 構築する内容 |
| - | - |
| 認証 | サインイン、セッションの検証、サインアウト。 |
| 本人確認 + 認証 | ポリシーで必要な場合、サインイン後にトークンの`vendor_data`を使って検証を開始します。 |
| トランザクションモニタリング + 認証 | サインイン中の人物の`vendor_data`で取引を送信します。サインインイベントは同じ人物のタイムラインに表示され、ルールの対象になります。 |
| 3つすべて | 1人につき1つの`vendor_data`を使います。各製品の判定は個別に処理してください。 |

どの組み合わせでも[共通の連携プロンプト](https://docs.didit.me/ja/integration/integration-prompt.md)を使用してください。サインイン時に適用されるポリシーについては[ボット対策](https://docs.didit.me/ja/authentication/bot-protection.md)を参照してください。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.