仕組み
各アプリケーションには、専用のサインインオリジンと専用のトークン発行者が割り当てられます。本番環境のアプリケーションとサンドボックスのアプリケーションは別々であり、オリジン、設定、アイデンティティもそれぞれ独立しています。
フローはPKCE付きのOAuth 2.0認可コードフローです(
S256のみ):
- お客様のアプリが
redirect_uri、state、code_challenge、code_challenge_method=S256を付けて{origin}/sign-inを開きます。 - ホスト型ページが、お客様が有効にした方法で、必要な第2要素も含めて、ユーザーをサインインまたはサインアップさせます。
- ブラウザが
codeとstateを付けてお客様のredirect_uriに戻ります。 - お客様のアプリが
POST {origin}/token/でコードを交換し、アクセストークン、IDトークン、リフレッシュトークンを取得します。
プラットフォームを選択する
JavaScript
ホスト型サインイン、コールバック、セッション、ログアウト。
React
クライアントの状態と保護されたアプリケーション画面。
Next.js
サーバーセッション、コールバックルート、Cookie。
iOS
システムブラウザと安全なトークン保存。
Android
ブラウザでの認可とアプリへのコールバック。
React Native
ネイティブ認証ラッパーの準備。
Flutter
ネイティブ認証ラッパーの準備。
アプリケーションを準備する
- お客様のアプリケーションでAuthenticationを有効にするようDiditに依頼してください。まずサンドボックスのアプリケーションでテストしてください。
- 正確なリダイレクトURL(最大50件)と、ランタイムAPIを呼び出すブラウザの
allowed_origins(最大50件)を登録します。 - 提供したいサインイン方法を有効にします。Didit ID Walletは常に有効です。
- セッションとパスワードの設定を選択します(下記参照)。
- 本番運用を開始する前に、サインアップ、サインイン、パスワードの再設定、MFA、セッションの有効期限切れ、ログアウトをテストしてください。
リダイレクトURL
Diditは、お客様が登録したアドレスにのみユーザーを戻します。 コンソールのAuthentication > Security and sessions > Redirect URLs and allowed originsで登録してください。 サインインリクエストのredirect_uriは、スキーム、ホスト、ポート、パス、クエリのすべてにおいて、登録済みのURLと1文字ずつ一致している必要があります。
ポートが異なる場合、末尾にスラッシュがある場合、大文字と小文字が異なる場合は、別のアドレスとして扱われます。
ワイルドカード、フラグメント、URL内の認証情報、カスタムスキームは拒否されます。
アドレスが登録されていない場合、Diditがそのアドレスにリダイレクトすることは決してありません。
{origin}/sign-inは、何をどこに登録すべきかを示すページとともに400を返し、POST {origin}/authorize/は400 {"error": "invalid_redirect_uri"}を返します。
ローカル開発
サンドボックスのアプリケーションを使って、ご自身のマシンでテストします:- コールバックをポート付きで登録します。例:
http://localhost:3000/auth/callback。 - ブラウザのコードがランタイムAPIを呼び出す場合、たとえば
POST {origin}/token/でコードを交換する場合は、そのオリジンもAllowed originsに追加します。パスや末尾のスラッシュを付けずにhttp://localhost:3000と指定してください。 pk_test_...キーを使って、サンドボックスのオリジンhttps://<slug>.sandbox.auth.didit.meでサインインを開始します。
localhost、127.0.0.1、[::1]はそれぞれ別のアドレスであり、ポートごとにも別のアドレスとして扱われます。
使用するものをそれぞれ登録してください。
本番環境のアプリケーションはhttp://を一切受け付けません。
本番運用を開始する前に、本番環境のhttps://コールバックを本番環境のアプリケーションに登録してください。
アプリケーション設定
これらの設定は、コンソールで管理するか、write:authenticationを持つ承認済みのコンソールセッションで管理します。
製品をまたいで同じ人物として扱う
すべてのアイデンティティはvendor_dataの値を持ちます。これは、その人をインポートしたときに指定したexternal_idで、指定していない場合はDiditのアイデンティティIDです。この値はアクセストークン、IDトークン、GET session/に含まれます。
検証セッションの作成時や取引の送信時には、同じ値をvendor_dataとして使用してください。これにより、認証イベントがコンソール上で、その人の検証や取引と同じ人物に紐づきます。詳しくはイベントとWebhookを参照してください。
vendor_dataは、検証済みのトークンからバックエンドで導出してください。未検証のブラウザのフィールドから取得してはいけません。
どの組み合わせでも共通の連携プロンプトを使用してください。サインイン時に適用されるポリシーについてはボット対策を参照してください。