Push! Passkeyは、既存の会員サイトや業務システムへ、パスキー登録・認証機能を追加するための認証APIサービスです。
Push! Passkeyを利用すると、Challengeの生成、WebAuthn登録結果の検証、認証署名の検証、Credential IDと公開鍵の管理など、パスキー認証基盤に必要な専門処理をジンテック側へ外部化できます。
一方、Push! Passkeyが認証に成功しただけでは、顧客サイトへのログインは完成しません。
顧客サイト側では、認証対象となる自社ユーザーを特定し、Push! Passkeyから取得した結果を確認したうえで、自社サイトのログインセッションを発行する必要があります。
また、ユーザーの契約状態、利用停止状態、権限、パスキー登録を許可する条件、端末紛失時の復旧方法などは、顧客サイト側で設計します。
このページでは、Push! Passkeyを構成するシステム、登録・認証時のデータの流れ、各システムが保持する情報、顧客サイトとジンテックの責任分界について解説します。
Push! Passkeyによるパスキー登録・認証は、一つのWebページだけで完結する処理ではありません。
利用者の端末、顧客サイトのフロントエンド、顧客サイトのバックエンド、Push! Passkey認証基盤、顧客サイトのユーザーDBやセッション管理機能が連携して処理を行います。
主な構成要素は次のとおりです。
| 構成要素 | 主な役割 |
|---|---|
| 利用者 | 顧客サイトからパスキー登録・認証を開始し、端末上で本人確認を行う |
| 利用者端末 | パスキーの秘密鍵を保護し、顔認証、指紋認証、PINなどを実行する |
| 顧客サイトのフロントエンド | 登録・認証ボタンを表示し、顧客サイトのバックエンドへ処理開始を要求する |
| 顧客サイトのバックエンド | 自社ユーザーを特定し、APIキーを使用してPush! Passkey APIへ接続する |
| Push! Passkey認証基盤 | Challenge生成、WebAuthn処理、Credential管理、署名検証、結果管理を行う |
| 顧客サイトのユーザーDB | 顧客サイト独自のユーザー情報、契約状態、権限、利用停止状態などを管理する |
| 顧客サイトのセッション管理 | 認証成功後に、自社サイトへログインした状態を作成する |
| Push! Passkey管理ツール | ドメイン登録、APIキー発行、トランザクション確認などを行う |
Push! Passkeyでは、パスキー登録・認証処理を次の認証ドメインで実行します。
https://auth.jintec.com/
利用者が顧客サイトに設置されたボタンを押すと、顧客サイトのバックエンドからPush! Passkeyへ処理開始要求が送信されます。
その後、利用者はPush! Passkeyの認証ドメインでパスキー登録または認証を行います。
パスキーのRPはPush! Passkeyの認証ドメインとなり、WebAuthnのChallenge管理、登録結果の検証、認証署名の検証はPush! Passkey側で行われます。
ただし、顧客サイトのユーザーDBやログインセッションがPush! Passkey側へ移動するわけではありません。
Push! Passkey管理ツールは、契約企業の管理者や開発担当者が接続設定を行うためのシステムです。
管理ツールのURLは次のとおりです。
https://secure.jintec.com/
管理ツールでは、主に次の操作を行います。
管理ツールは、一般利用者が日常的にパスキー認証を行う画面ではありません。
一般利用者のパスキー処理は認証ドメインで行い、契約企業の設定・運用管理は管理ツールで行います。
顧客サイトのHTMLでは、Push! PasskeyのJavaScriptを読み込み、登録ボタンまたは認証ボタンを設置します。
<script src="https://auth.jintec.com/js/passkey.js"></script>
登録ボタンの例は次のとおりです。
<button type="button" class="push_btn" data-pushpasskey="regist" data-endpoint="/pushpasskey/endpoint" data-success-url="/regist_ok.html"> パスキー登録 </button>
認証ボタンの例は次のとおりです。
<button type="button" class="push_btn auth" data-pushpasskey="auth" data-endpoint="/pushpasskey/endpoint" data-success-url="/auth_ok.html"> パスキー認証 </button>
ボタンのdata-endpointには、Push! Passkey APIのURLを直接指定するのではなく、顧客サイト内に設置したバックエンドエンドポイントを指定します。
Push! PasskeyのAPIキーは、顧客サイトのバックエンドで管理します。
HTMLやJavaScriptへAPIキーを記載すると、ブラウザの開発者ツール、ページソース、通信内容などから第三者に確認されるおそれがあります。
顧客サイト内のバックエンドエンドポイントは、単なる転送用URLではありません。
主に次の役割を持ちます。
フロントエンドから送信されたユーザーIDを、そのまま信用してPush! Passkeyへ連携してはいけません。
登録対象ユーザーや認証対象ユーザーは、顧客サイトのログインセッションやサーバ側の情報を使って特定します。
パスキー登録は、新しい認証手段をユーザーアカウントへ追加する重要な操作です。
Push! Passkeyは、顧客サイトから連携されたユーザー識別子に対してパスキーを登録します。
しかし、そのユーザー識別子を現在操作している人物へ登録させてよいかどうかは、顧客サイト側で判断します。
登録前には、少なくとも次の状態を確認してください。
ログインしていない利用者から送られたユーザーIDや、URLパラメータに指定されたユーザーIDだけを根拠として、パスキー登録を開始してはいけません。
パスキー登録成功後は、必要に応じて顧客サイト側でも「パスキー登録済み」などの状態を管理できます。
ただし、Credential IDや公開鍵そのものはPush! Passkey側で管理されます。
Push! Passkeyが返す認証成功は、登録済みのパスキーによるWebAuthn認証が正常に完了したことを示します。
認証成功後に、顧客サイトへログインした状態を作成するのは顧客サイト側です。
Push! Passkeyが顧客サイトのログインCookieやアプリケーションセッションを直接発行することはありません。
認証結果が成功であっても、顧客サイトは自社ユーザーの現在状態を確認します。
例えば、次の状態ではログインを許可しない判断が必要になる場合があります。
Push! Passkeyはパスキーが正しく利用されたことを確認しますが、顧客サービスの利用可否までは判断しません。
Push! Passkeyは、パスキーによる登録・認証を安全に実行するための認証基盤を提供します。
顧客サイトは、自社サービスのユーザー管理、本人確認、権限管理、ログイン状態を管理します。
両者の責任分界は次のとおりです。
| 項目 | Push! Passkey | 顧客サイト |
|---|---|---|
| 登録用Challengeの生成 | 担当 | - |
| 認証用Challengeの生成 | 担当 | - |
| Challengeの有効期限管理 | 担当 | - |
| Challengeの再利用防止 | 担当 | - |
| WebAuthn登録結果の検証 | 担当 | - |
| WebAuthn認証署名の検証 | 担当 | - |
| RP IDとOriginの検証 | 担当 | - |
| Credential IDの管理 | 担当 | - |
| 公開鍵の管理 | 担当 | - |
| パスキー登録・認証画面 | 担当 | 呼び出し導線を設置 |
| トランザクション管理 | 担当 | 必要に応じて自社ログと紐付け |
| APIキーの発行 | 管理ツールで提供 | 安全に保管・使用 |
| 登録対象ユーザーの本人確認 | - | 担当 |
| 自社ユーザーIDとの紐付け | 連携値を保持 | 担当 |
| パスキー登録を許可する条件 | - | 担当 |
| 認証結果の取得・確認 | 結果を提供 | 担当 |
| 顧客サイトのセッション発行 | - | 担当 |
| ユーザーの権限確認 | - | 担当 |
| 契約状態・利用停止状態の確認 | - | 担当 |
| ログイン後の画面制御 | - | 担当 |
| 顧客サービスのアカウント復旧 | - | 担当 |
| Push! Passkey認証基盤の運用 | 担当 | - |
| 顧客サイトのサーバ・アプリ運用 | - | 担当 |
Push! Passkeyは、登録済みパスキーを正しく利用できる人物であることを確認します。
一方、初回のパスキー登録時に、その人物が顧客サイトの正当なアカウント所有者であるかを確認するのは顧客サイト側です。
例えば、第三者が何らかの方法で他人のログイン済み画面を操作し、自分のパスキーを登録できてしまうと、その後は第三者のパスキーで正常に認証できる状態になります。
そのため、パスキー登録前には、既存パスワード、メール確認、SMS認証、既存パスキー、管理者承認など、サービスのリスクに応じた本人確認を行います。
Push! Passkeyの認証結果が成功であっても、そのユーザーへ管理者権限を付与したり、有料機能を利用させたりする判断は顧客サイト側で行います。
認証と認可は異なる処理です。
Push! Passkeyは主に認証を担当し、顧客サイトは認可を担当します。
Push! Passkeyを安全に実装するためには、どの情報をどのシステムで保持するかを明確にする必要があります。
| 情報 | 主な保持場所 | 用途 |
|---|---|---|
| 顧客サイトのユーザーID | 顧客サイトDB | 自社ユーザーを一意に識別する |
| Push! Passkeyへ連携するユーザー識別子 | 顧客サイト、Push! Passkey | 両システム間で対象ユーザーを対応付ける |
| 氏名、住所、契約情報 | 顧客サイトDB | 顧客サービスの会員・契約管理 |
| APIキー | 顧客サイトのバックエンド | Push! Passkey APIへの接続認証 |
| Credential ID | Push! Passkey | 登録されたパスキーを識別する |
| 公開鍵 | Push! Passkey | 認証署名を検証する |
| 秘密鍵 | 利用者端末またはパスキープロバイダー | 認証時の署名を作成する |
| 顔・指紋データ | 利用者端末 | 端末上で本人確認を行う |
| Challenge | Push! Passkey | 登録・認証要求を一度限りにする |
| トランザクション情報 | Push! Passkey | 登録・認証の進行状態と結果を管理する |
| 顧客サイトのログインセッション | 顧客サイト | 認証成功後のログイン状態を維持する |
| 顧客サイトの権限情報 | 顧客サイトDB | 利用可能な機能を判断する |
パスキーの秘密鍵は、利用者の端末、セキュリティキー、またはパスキープロバイダー側で保護されます。
Push! Passkeyや顧客サイトが、秘密鍵そのものを受け取って保存することはありません。
顔画像や指紋情報も、Push! Passkeyや顧客サイトへ送信されません。
顔認証、指紋認証、PINは、利用者端末内で秘密鍵の使用を許可するために利用されます。
Push! Passkeyへ連携するユーザー識別子には、顧客サイトのユーザーを一意に識別できる値を使用します。
推奨される例は次のとおりです。
メールアドレスは変更される可能性があり、個人情報にも該当するため、ユーザー識別子として使用する場合は運用を慎重に設計します。
氏名、電話番号、画面表示名など、一意性が保証されない値をユーザー識別子として使用しないでください。
退会したユーザーのIDを、将来別のユーザーへ再割り当てすると、過去のパスキーとの対応関係に問題が生じる可能性があります。
Push! Passkeyへ連携したユーザー識別子は、原則として別人へ再利用しない設計を推奨します。
ブラウザから送信される次のような値は、利用者によって変更される可能性があります。
重要な判断は、顧客サイトのバックエンドで行います。
特に、パスキー登録対象のユーザーは、ブラウザから送信されたユーザーIDではなく、顧客サイトのログインセッションから特定してください。
APIキーはPush! Passkey APIへの接続を許可する機密情報です。
次の場所へAPIキーを記載してはいけません。
APIキーは、サーバ側の設定ファイル、環境変数、シークレット管理サービスなどで保管します。
可能な場合は、設定ファイルをドキュメントルートの外へ配置してください。
認証後にauth_ok.htmlが表示されたことだけを根拠として、ログイン成功と判断してはいけません。
リダイレクトは利用者のブラウザを目的の画面へ移動させる仕組みであり、サーバ間で認証結果を保証する仕組みではありません。
認証成功後のログインセッションは、顧客サイトのバックエンドがPush! Passkeyの結果を確認した後に発行します。
登録・認証開始時には、Push! Passkey側でトランザクションを識別する情報が発行されます。
顧客サイトでは、自社が開始した処理とPush! Passkeyから返された結果を対応付けます。
確認する代表的な項目は次のとおりです。
パスキー登録の開始操作は、ユーザーアカウントへ新しい認証手段を追加する重要操作です。
顧客サイトの登録開始エンドポイントには、通常の会員情報変更画面と同様にCSRF対策が必要です。
また、認証成功後は、認証前に使用していたセッションIDをそのまま継続せず、セッションIDを再生成してセッション固定攻撃を防止します。
Push! Passkeyを利用した認証では、複数のシステムが連携します。
問題が発生した場合は、どの区間で失敗しているかを確認します。
| 発生箇所 | 主な例 | 主な確認担当 |
|---|---|---|
| 顧客サイトのフロントエンド | ボタンが反応しない、JavaScriptが読み込めない | 顧客サイト |
| 顧客サイトのバックエンド | endpointのエラー、APIキー設定不備、タイムアウト | 顧客サイト |
| Push! Passkey API | APIエラー、トランザクション作成失敗 | ジンテック、顧客サイト |
| 認証画面 | Challenge期限切れ、処理キャンセル | ジンテック、利用者環境 |
| 利用者端末 | パスキーが見つからない、端末ロック未設定 | 利用者、端末管理者 |
| 認証後処理 | セッションを発行できない、ユーザーを特定できない | 顧客サイト |
| ネットワーク | DNS、TLS、ファイアウォール、通信遮断 | 各環境の管理者 |
顧客サイトでは、Push! Passkeyのトランザクション情報と自社のアプリケーションログを照合できるようにします。
利用者が端末を紛失した場合、顧客サイトでは次のような対応方針を決めておく必要があります。
Push! Passkey側がCredentialを管理していても、誰からの依頼で停止や再登録を認めるかは、顧客サービスの本人確認方針に基づいて判断します。
すべてのパスキーを利用できなくなった場合に備えて、アカウント復旧手順が必要です。
復旧手段がパスキーより著しく弱い場合、攻撃者は通常のパスキー認証ではなく、復旧経路を狙います。
サービスの重要度に応じて、次のような方法を組み合わせます。
復旧が完了した場合は、既存のパスキーをそのまま残すか、すべて停止して再登録させるかを決めておきます。
Push! Passkeyを主要なログイン手段として利用する場合は、認証基盤やネットワークへ一時的に接続できない状況も想定します。
顧客サイト側で検討する項目には、次のようなものがあります。
代替認証を残す場合は、その認証方法が攻撃者の恒常的な迂回経路にならないように設計します。
開発環境、検証環境、本番環境でドメインが異なる場合は、それぞれをPush! Passkey管理ツールへ登録し、APIキーを分けて管理します。
| 環境 | 顧客サイトの例 | APIキー |
|---|---|---|
| 開発 | dev.example.com |
開発環境専用 |
| 検証 | staging.example.com |
検証環境専用 |
| 本番 | www.example.com |
本番環境専用 |
本番用APIキーを開発者のローカル環境へ保存したり、開発環境のソースコードへ記載したりしないでください。
Push! Passkeyは、パスキー登録・認証に必要となるChallenge管理、WebAuthn検証、Credential IDと公開鍵の管理、認証署名の検証、トランザクション管理を提供します。
顧客サイト側は、自社ユーザーの本人確認、ユーザー識別子の連携、認証結果の確認、ログインセッションの発行、権限管理、契約状態の確認、端末紛失時の復旧を担当します。
重要な責任分界は次のとおりです。
Push! Passkeyを安全に導入するには、「認証APIへ接続できたか」だけでなく、登録前の本人確認、認証後のセッション発行、ユーザー状態の確認、紛失時の復旧までを一連の仕組みとして設計する必要があります。
システム構成と責任分界を確認した後は、「実装ガイド」で導入作業の順序と必要なファイルを確認してください。