Push! Passkeyは、WebAuthnの公開鍵暗号を利用して登録・認証処理を提供します。
ただし、パスキー認証を導入するだけで、顧客サイトのアカウント管理、権限管理、セッション管理、復旧運用、ログ管理まで自動的に安全になるわけではありません。
顧客サイトでは、登録前の本人確認、ユーザー識別子の決定、APIキーの保護、認証結果の照合、ログインセッションの発行、利用停止状態の判断、端末紛失時の復旧を安全に設計する必要があります。
本ページでは、Push! Passkeyを安全に実装・運用するための重要事項を、責任分界に沿って説明します。
Push! Passkeyの認証成功は、暗号学的な認証処理が成功したことを示します。
顧客サイトへのログイン許可、管理者権限、契約状態、利用停止状態は、顧客サイト側で判断してください。
WebAuthnの公開鍵クレデンシャルは、正規のRPとオリジンに対応付けられます。
顧客サイトもHTTPSで保護し、通信経路上でHTML、JavaScript、Cookie、API応答が改ざんされないようにしてください。
API接続時に証明書検証を無効化すると、中間者攻撃によってAPIキーや認証結果が窃取・改ざんされる危険があります。
現在の正式仕様では、Push! Passkey APIへ送信するJSON本文のapi_key項目へAPIキーを設定します。
このJSONは、顧客サイトのバックエンドで作成してください。
パスキー登録は、その後のログインに使用できる新しい認証手段をアカウントへ追加する重要操作です。
攻撃者が一時的にログインセッションを取得した状態で、自分の端末へパスキーを登録できると、継続的なアカウント乗っ取りにつながります。
新しいパスキーが登録された場合は、利用者へメールや既存の通知手段で知らせる運用を推奨します。
通知にはAPIキー、Credential IDの完全値、セッションIDなどの秘密情報を含めないでください。
user_keyは、顧客サイトのセッションまたはDB検索結果からバックエンド側で決定してください。
ブラウザから送信された値だけを信用して登録対象ユーザーを決めてはいけません。
メールアドレスは変更される可能性があり、個人情報でもあります。
可能であれば、変更されない内部ユーザーIDから外部連携用の識別子を生成してください。
ログイン中の利用者に意図しないパスキー登録を実行させないよう、登録開始APIへCSRF対策を適用してください。
SameSite属性は重要な補助対策ですが、アプリケーションの構成やブラウザ挙動を考慮し、重要操作ではCSRFトークンと組み合わせてください。
パスキー登録開始、登録削除、セッション発行などの状態変更処理をGET要求で実装しないでください。
顧客endpointが受け付ける処理種別は、次の正式な値へ限定します。
regist_start auth_start regist_result auth_result
actionとPush! Passkey APIの接続先は、バックエンド内の固定対応表で決定してください。
ブラウザから受け取ったURLへAPIキー付きJSONを送信してはいけません。
return_page_urlを自由入力のURLとしてそのまま使用すると、認証完了後に利用者を攻撃者のサイトへ誘導する危険があります。
リダイレクト時のpp_statusやpp_error_codeは画面遷移の補助情報です。
ログイン可否は、バックエンドから結果照会APIを呼び出して判断してください。
URL発行APIから返されたrequest_idは、顧客サイト側でセッションまたはDBへ保存します。
認証成功結果をログインに使用した後は、使用済みとして更新してください。
DBを利用する場合は、request_idへ一意制約を設定し、未使用から使用済みへの更新を原子的に行います。
Push! Passkey認証画面から顧客サイトへ戻っただけでは、顧客サイトのログインを許可しないでください。
一つでも条件を満たさない場合は、ログインセッションを発行しないでください。
認証結果のuser_keyから顧客サイトのユーザーを検索し、現在の利用状態を確認します。
管理者権限や高リスク操作では、通常ログインとは別に再認証や追加確認を行うことを検討してください。
ログイン前の匿名セッションIDをそのままログイン後に使用せず、認証成功後にセッションIDを再生成してください。
| 属性 | 推奨設定 |
|---|---|
Secure |
HTTPS通信だけで送信する |
HttpOnly |
JavaScriptからセッションCookieを参照できないようにする |
SameSite |
サイト構成に応じてLaxまたはStrictを検討する |
Path |
必要な範囲へ限定する |
Domain |
不要に広いサブドメイン共有を避ける |
利用者の連続クリック、ブラウザ再読込、ネットワークタイムアウト、Webhook再送によって同じ処理が複数回実行される可能性があります。
URL発行APIがタイムアウトした場合でも、Push! Passkey側で処理が完了している可能性があります。
| 利用者向け | 内部ログ |
|---|---|
| 再試行方法 | request_id |
| 有効期限切れの案内 | kind |
| 問い合わせ用受付番号 | APIパス |
| 一般化したエラー内容 | HTTPステータス |
| 秘密情報を含めない | error_code |
Push! Passkey管理ツールでは、ドメイン登録、APIキー発行、利用状況確認などの重要操作を行います。
端末紛失、退職、退会、契約終了、不正利用の疑いがある場合は、パスキーの利用停止または削除を行える運用を準備してください。
Credentialの無効化と、顧客サイトの既存ログインセッションの無効化は別の処理です。
重大な不正利用が疑われる場合は、既存セッションも失効させてください。
パスキーを安全に導入しても、メールだけの簡単な確認や、推測しやすい秘密の質問だけでアカウントを復旧できると、攻撃者は復旧経路を狙います。
利用者が複数端末を所有する場合は、予備のパスキーを登録できる運用にすると、復旧負荷を軽減できます。
パスキーはRPとオリジンに対応付けられるため、偽サイト上では正規サイト用のパスキーを通常利用できません。
ただし、利用者が偽のサポート窓口へ情報を渡す、リモート操作を許可する、アカウント復旧を悪用されるなど、パスキー以外の手段による攻撃は残ります。
顧客サイトにXSS脆弱性があると、利用者の操作、画面表示、セッション情報、登録・認証フローが攻撃者に悪用される可能性があります。
Push! PasskeyのJavaScriptと認証画面への接続を許可しつつ、不要なドメインを広く許可しないでください。
Webhook本文のstatusだけでセッションを発行せず、保存済みトランザクションと照合してください。
テストには専用ユーザーと専用Credentialを使用してください。
本番APIキーをローカル開発端末や公開リポジトリへ配置しないでください。
監視通知にはrequest_id、error_code、受付番号などを使用し、APIキーやCookieを含めないでください。
| 事象 | 主な対応 |
|---|---|
| APIキー漏えい | 無効化、再発行、設定更新、ログ調査 |
| 端末紛失 | Credential無効化、既存セッション失効、本人確認 |
| 不正パスキー登録 | 登録削除、セッション失効、本人確認、原因調査 |
| アカウント乗っ取り | ユーザー停止、全Credential無効化、ログ保全 |
| 管理者アカウント侵害 | 管理権限停止、APIキー確認、管理操作ログ調査 |
ログを削除・上書きせず、発生日時、request_id、管理操作、影響範囲を記録してください。
顧客サイトとPush! Passkeyの役割、通信経路、信頼境界を確認します。
request_id、kind、user_key、statusの照合とセッション発行を確認します。
エラーごとの発生条件、画面表示、内部ログの扱いを確認します。
実装・通信・結果照会・セッションの問題を切り分けます。
Push! Passkeyは、Challenge管理、公開鍵管理、署名検証などのWebAuthn認証処理を提供します。
顧客サイトでは、登録前の本人確認、APIキー保護、user_keyの決定、CSRF対策、結果照合、ユーザー状態確認、セッション発行を安全に実装してください。
認証結果は必ずバックエンドから照会し、request_id、kind、user_key、status、判定フラグを検証します。
端末紛失、不正登録、APIキー漏えい、アカウント復旧を想定し、無効化、通知、ログ保全、インシデント対応の手順を事前に準備してください。