MFA 信頼済みデバイス
MFA 信頼済みデバイスを利用すると、ユーザーは信頼するブラウザで繰り返し MFA プロンプトをスキップできます。対象となる MFA の認証 (Authentication) またはセットアップ後、サインインやサインアップの最後に、別ページの このデバイスを信頼する でブラウザを信頼するか選択できます。Logto は、その後、期間限定の認証情報をファーストパーティ Cookie に保存します。後日のサインイン時、有効な認証情報があれば、ユーザー操作なしで MFA 認証 (Authentication) ステップを完了できます。
信頼済みデバイスは新しい MFA 要素ではなく、Logto が MFA を要求するタイミングを変更しません。サインインフローの MFA ステップのみを満たすことができます。アイデンティティ確認、直近の認証 (Authentication)、アカウント復旧、MFA 要素管理、その他の機密性の高いアカウント操作には利用できません。
信頼済みデバイスの仕組み
サインインが MFA 認証 (Authentication) ステップに到達した際、Logto は以下を実行します:
- 現在の MFA ポリシーを評価し、MFA が必要かどうかを判断します。
- 信頼済みデバイスがテナントで有効かつ、ユーザーが所属するすべての組織で許可されているかを確認します。
- ブラウザ Cookie を、識別されたユーザーのアクティブなサーバー側レコードと照合します。
- 認証情報が有効な場合は自動的に MFA を完了します。有効でない場合は認証情報をクリアし、通常の MFA フローを継続します。
サインインまたはサインアップ時にデバイスを信頼する
組み込みのサインイン体験では、必要なプロフィール入力や MFA ステップの後、対象となるサインインまたはサインアップフローの最後に このデバイスを信頼する ページが表示されます。ブラウザを信頼するかどうかはこのページで明示的に選択でき、MFA 認証 (Authentication) やセットアップとは別の操作です。
このページは、信頼済みデバイスがテナントで有効かつ、ユーザーが所属するすべての組織で許可されており、かつ現在の操作で対象となる MFA 証明がある場合のみ表示されます:
- 有効な認証アプリ OTP、パスキー (WebAuthn)、メール認証コード、または SMS 認証コードによる MFA 認証 (Authentication) の成功。
- サインアップ時を含む MFA セットアップ中の認証アプリまたはパスキーの正常なバインディング。
パスワードリセット時や、対象となる MFA 証明がない場合はページは表示されません。バックアップコード認証や既存の信頼済みデバイス認証情報のみでは対象外のため、すべてのサインインやサインアップでページが表示されるわけではありません。以前に スキップ を選択した場合も、下記の通りページ表示が抑制されます。
ページ上でユーザーは以下を選択できます:
- このデバイスを N 日間信頼する:設定された信頼期間でオプトインします。Logto は、操作がすべて成功した後にのみ信頼済みデバイスレコードと Cookie 認証情報を作成します。
- スキップ:信頼済みデバイスを作成せずに続行します。このページをスキップしても、必要な MFA 認証 (Authentication) やセットアップはスキップされません。
ユーザーが スキップ を選択すると、Logto は現在のブラウザに、そのテナントとユーザーにスコープされた別のオプトアウト Cookie を保存します。有効期間はスキップ時点の信頼期間です。この Cookie がブラウザに残っている間は、後続のサインインでページは再表示されません。Cookie の有効期限切れや削除後は、再度対象となるフローでページが表示されます。オプトアウト Cookie はデバイス信頼や MFA の認証 (Authentication) を満たしません。
ユーザーが スキップ を選択した後、現在のブラウザを信頼したい場合は、ブラウザの Cookie 設定や開発者ツールで Logto ドメインの該当オプトアウト Cookie を削除するのが推奨されます。Cookie 名は __Host-logto-device-trust-opt-out- で始まります。
または、Logto ドメインのすべての Cookie を削除してください。
いずれかの方法の後、再度サインインし、対象となる MFA 認証 (Authentication) またはセットアップを完了し、ページが表示されたら このデバイスを N 日間信頼する を選択してください。
信頼済みデバイスの作成やサインイン後のメタデータ更新はベストエフォートで行われるため、失敗しても他の認証 (Authentication) 操作が成功していれば全体が失敗することはありません。
信頼済みデバイスポリシーの設定
グローバルポリシー
コンソール > 多要素認証 (MFA) で 信頼済みデバイス を設定します:
- テナント単位で信頼済みデバイスを有効 / 無効にします。デフォルトは無効です。
- 1~365 日の整数で信頼期間を設定します。デフォルトは 30 日です。
信頼済みデバイス作成時に期間が固定されます。デバイスの利用で有効期限が延長されることはなく、期間変更は以降に作成されるデバイスにのみ適用されます。
グローバルポリシーを無効にすると、既存の信頼済みデバイスは MFA を満たせなくなりますが、削除はされません。再度有効化すると、有効期限切れや削除されていないレコードは再び利用可能になります。
組織レベルの制限
組織ごとに、メンバーに対して信頼済みデバイスの利用を許可 / 不許可にできます。この設定はテナントレベルのポリシーを厳格化するのみです:
- グローバルポリシーが無効な場合、組織単位で信頼済みデバイスを有効化できません。
- ユーザーが所属するいずれかの組織が信頼済みデバイスを不許可にしている場合、そのユーザーの信頼済みデバイス認証情報は MFA を満たせません(その組織で MFA が必須かどうかに関わらず)。
- 組織ごとの信頼期間はありません。グローバル期間が適用されます。
組織で信頼済みデバイスを不許可にすると、該当メンバーの利用が停止されますが、レコードは削除されません。また、ユーザーや管理者による一覧表示や削除も妨げません。
ブラウザと Cookie の制限
信頼済みデバイスの再利用には、同じ Logto エンドポイントで永続的なファーストパーティ Cookie を保存・返却できるブラウザコンテキストが必要です。これは物理デバイスではなく、ブラウザプロファイル単位で管理されます。
WebView、システムブラウザ、カスタムタブ、プライバシーモード、Cookie 無効ブラウザ、その他一時的なコンテキストでは、Cookie ストアが認証情報を永続化できる場合のみ信頼済みデバイスが利用可能です。後日のサインイン時に Cookie が利用できない場合、Logto は認証 (Authentication) 失敗ではなく通常の MFA フローを継続します。異なるブラウザ、ブラウザプロファイル、Logto ドメイン、テナント、ユーザー間で信頼済みデバイス認証情報は共有されません。
Logto はブラウザフィンガープリントや、クライアントが Cookie を永続化できるかの事前検出を行いません。ネイティブアプリやカスタムサインインフローでは、信頼済みデバイス作成はベストエフォートとして扱い、通常の MFA フローも利用可能にしておくべきです。
信頼済みデバイスの管理
expiresAt が将来のアクティブなレコードのみが一覧表示されます。デバイス名は最新のユーザーエージェントから生成され、国や都市は最新リクエストコンテキストからの概算メタデータです。生の IP アドレスは UI や公開 API で表示・返却されません。
管理者による管理
コンソール > ユーザー管理 でユーザーを開き、その信頼済みデバイスの一覧表示や削除ができます。信頼済みデバイスを削除しても、今後のサインインにのみ影響し、現在のアクティブセッションは終了しません。
Management API も利用できます:
GET /api/users/{userId}/trusted-devices:ユーザーのアクティブな信頼済みデバイスをすべて一覧表示します。DELETE /api/users/{userId}/trusted-devices/{trustedDeviceId}:ユーザーが所有する 1 つの信頼済みデバイスを削除します。
レスポンスには id, userAgent, country, city, createdAt, lastUsedAt, expiresAt が含まれます。
curl https://[tenant-id].logto.app/api/users/[user-id]/trusted-devices \
-H "Authorization: Bearer [management-api-access-token]"
curl -X DELETE \
https://[tenant-id].logto.app/api/users/[user-id]/trusted-devices/[trusted-device-id] \
-H "Authorization: Bearer [management-api-access-token]"
Management API で認証 (Authentication) する方法 を参照してください。
アカウントセンターでのセルフサービス管理
コンソール > サインイン & アカウント > アカウントセンター で 信頼済みデバイス フィールドを設定します:
- オフ:ユーザーは信頼済みデバイスの一覧表示や削除ができません。
- 読み取り専用:ユーザーは信頼済みデバイスを一覧表示できますが、削除はできません。
- 編集:ユーザーは信頼済みデバイスの一覧表示と削除ができます。
組み込みのアカウントセンターでは、セキュリティページにアクティブな信頼済みデバイスが表示され、現在のブラウザの Cookie 認証情報が有効な場合はマークされます。現在のブラウザを削除すると、その信頼済みデバイス Cookie はクリアされますが、現在のログインセッションは維持されます。他のブラウザのレコードを削除しても、そのブラウザの Cookie を即座にクリアできません。古い Cookie は次回提示時に拒否・クリアされます。
カスタムアカウントセンターの場合は、urn:logto:scope:trusted_devices スコープをリクエストし、直近の urn:logto:acr:1fa アクセストークンで Account API を呼び出してください(OIDC ステップアップ認証 (Authentication) 参照):
GET /api/my-account/trusted-devices:サインイン中ユーザーのアクティブな信頼済みデバイスを一覧表示し、各項目にisCurrentを追加します。DELETE /api/my-account/trusted-devices/{trustedDeviceId}:サインイン中ユーザーが所有する 1 つの信頼済みデバイスを削除します。削除はファーストパーティアプリケーションのみ利用可能です。
curl https://[tenant-id].logto.app/api/my-account/trusted-devices \
-H "Authorization: Bearer [account-api-access-token]"
curl -X DELETE \
https://[tenant-id].logto.app/api/my-account/trusted-devices/[trusted-device-id] \
-H "Authorization: Bearer [account-api-access-token]"
Account API リファレンス および ステップアップ認証 (Authentication) で認可フローを確認してください。
セキュリティモデル
信頼済みデバイス認証情報は、レコード ID と暗号学的にランダムな 32 バイトのシークレットからなる不透明トークン (Opaque token) 型ベアラー認証情報です。
- 本番環境では、Logto は
__Host-プレフィックス、HttpOnly、Secure、SameSite=Lax、Path=/属性付きのホスト限定 Cookie に保存します。アプリケーション JavaScript からは読み取れません。 - サーバー側ではシークレットの SHA-256 ハッシュのみを保存し、認証情報の比較はタイミングセーフに行います。
- すべての認証情報検索はテナントとユーザーに限定され、
expiresAtが将来である必要があります。 - 有効期限は作成時に固定されます。期限切れレコードのクリーンアップは後から行われることがありますが、クリーンアップタイミングはセキュリティ制御には利用されません。
- 明示的な削除はサーバー側レコードを即時削除します。コピーや古い Cookie は、レコード削除後は検証に通りません。
認証情報のシークレットやハッシュは UI、公開 API、監査ログ、Webhook で公開されません。公開デバイス ID は物理デバイス識別子ではなく、認証 (Authentication) には十分ではありません。Cookie はベアラー認証情報のため、完全な Cookie をコピーすれば、レコードの有効期限切れや削除まで同じテナント・ユーザーで信頼を再現できますが、信頼済みデバイスはハードウェアによるデバイス証明を提供しません。
監査ログと Webhook
信頼済みデバイス固有の監査ログには以下が含まれます:
TrustedDevice.Created:正常な操作後に信頼済みデバイスレコードと Cookie 認証情報が作成されました。TrustedDevice.Used:信頼済みデバイス認証情報で MFA を満たし、サインインが正常に完了しました。
これらのデータ変更 Webhook を購読できます:
TrustedDevice.Created:信頼済みデバイスレコードが作成されました。TrustedDevice.Deleted:ユーザーまたは管理者が信頼済みデバイスレコードを削除しました。
イベントデータには信頼済みデバイスの id, userId, expiresAt が含まれます。Cookie 認証情報、シークレットハッシュ、リクエスト IP は含まれません。成功利用の Webhook はイベント量抑制のためありません。また、ポリシー変更はレコードを変更しないため信頼済みデバイスのライフサイクルイベントは発行されません。
自然失効には TrustedDevice.Expired Webhook はありません。失効はアプリケーションの操作ではなく時間経過で発生し、物理的なクリーンアップは後から行われる場合があります。統合で有効期限を把握したい場合は TrustedDevice.Created の expiresAt を利用してください。
自然失効時も信頼済みデバイス固有の監査ログは作成されません。
監査ログイベントタイプ および Webhook イベント でイベントカタログを確認してください。
ライフサイクルに関する注意事項
- 通常のサインアウトでは信頼済みデバイスは削除されません。
- MFA 要素の追加・削除・リセットでも信頼済みデバイスは削除されません。
- 信頼済みデバイスを削除してもアクティブセッションは終了しません。
- ユーザー削除時はユーザーデータのライフサイクルに従い信頼済みデバイスレコードも削除されます。
- 信頼済みデバイスの件数制限や自動削除はありません。