機能 / 安全性

パスキー認証(WebAuthn / FIDO2)

rivio は、パスワード認証と並行して パスキー(WebAuthn / FIDO2) によるログインに対応しています。生体認証(Touch ID / Face ID / Windows Hello)や端末 PIN だけで、フィッシング耐性のあるサインインが可能です。

パスキーとは?

パスキーは、FIDO Alliance と W3C による国際標準(WebAuthn / FIDO2)に基づく認証方式です。パスワードを送信せず、ブラウザ・OS・端末上の認証器(Touch ID、Windows Hello、iCloud Keychain、YubiKey 等のセキュリティキー)が公開鍵暗号でサーバと認証を行います。

  • フィッシングに強い: ドメイン(RP ID)に縛られるため、なりすましサイトに認証情報を渡せません
  • パスワードを毎回入力せずにログイン可能: 生体認証・端末 PIN でサインインできます(rivio はパスワード認証も併存しています)
  • サーバ漏洩耐性: 公開鍵のみが保存されるため、データベース流出時も認証情報そのものは漏れません

rivio が提供するパスキー機能

  • パスキーの登録(1 ユーザーあたり最大 10 個まで、PC + スマホ等の併用に対応)
  • パスキーでのログイン(パスワードログインと併用)
  • 登録済みパスキーの一覧・端末名変更・削除(/settings/passkeys
  • 登録・削除前の recent-auth(直近 5 分以内のパスワード再入力)必須化
  • パスワード認証は引き続き利用可能(併存方式)

テナント単位の分離(テナント独自 RP ID)

rivio はパスキーの RP ID をテナントサブドメイン全体 に設定します(例: tenant1.rivio.one)。これにより:

  • tenant1.rivio.one で登録したパスキーは tenant2.rivio.one では使えません
  • ブラウザがクレデンシャルをドメイン単位で管理するため、別テナントへのクレデンシャル流用が 仕組みで不可能
  • テナント分離(マルチテナント)の境界を WebAuthn の境界と一致させ、テナント間漏洩を防ぎます

セキュリティ仕様

  • userVerification: required — 生体認証・PIN を必須化(UV なしの認証は受け付けません)
  • recent-auth ガード — パスキーの登録・削除前に直近 5 分以内のパスワード再入力を要求
  • Origin 厳密検証{scheme}://{host}[:{port}] を完全一致で検証。X-Forwarded-Proto は信頼、X-Forwarded-Host は信頼しない
  • challenge は Redis で 5 分 TTL + 一度きり消費(リプレイ防止)
  • sign counter 異常を監査ログ記録 — クラウド同期パスキー(iCloud Keychain 等)の counter が 0 固定/不安定なケースを考慮し、初期は警告ログのみ
  • 監査ログ — 登録 / 削除 / 認証成功 / 認証失敗を activity_logs に記録(生 credential_id・challenge は保存せず、先頭 16byte の sha256 ハッシュのみ)
  • ユーザー列挙抑制 — 未登録 email / パスキー未登録 / 非 active ユーザーのいずれでも 200 + 同型のダミーオプションを返却。allowCredentials は最低 4 件まで padding
  • credential 重複防止credential_id_hash(BINARY(32) UNIQUE)で二重登録をブロック

ロックアウト防止設計

  • パスワード認証は併存。パスキーを「追加」するだけで、これまで通りパスワードでもログイン可能
  • パスワード未設定(password === null)かつパスキーが残り 1 個のときのみ削除を拒否(自分でログイン手段を完全に失わないようにガード)
  • Feature flag AUTH_PASSKEY_ENABLED で kill switch を確保。env 変更 + cache clear で即座にエンドポイント全停止可能

ブラウザ・デバイス対応

  • Chrome / Edge / Safari / Firefox の最新版で動作
  • iCloud Keychain(macOS / iOS / iPadOS)
  • Windows Hello(Windows 10 / 11)
  • Android(Google Password Manager 等)
  • YubiKey などのセキュリティキー(FIDO2 対応モデル)
  • 非対応ブラウザでは「パスキーに対応していません」を表示してパスワードログインへ誘導

運用上の補足

  • パスキー登録時には事前にパスワード設定が必要です。招待初回フローではパスワード設定が必須のため、通常運用では問題になりません
  • ユーザー削除(soft delete)時には、当該ユーザーのパスキーを物理削除します
  • パスキーが異なる端末・OS にまたがって同期されるかは、利用するパスワードマネージャ・OS の仕様に依存します(rivio 側の制限ではありません)

14日間、無料で試してみませんか?

クレジットカード不要。Team プラン相当の機能を全開放。

無料で始める