説明
Rapls Passkey は WordPress にパスキーでのログインを追加します。Touch ID・Windows Hello・Face ID・セキュリティキーがパスワードの代わりになり、サーバーが共有の秘密を持つことはありません。保存されるのは公開鍵だけで、盗まれても何の役にも立ちません。
動画による操作解説 (日本語) :
多くの WordPress サイトが実際に動いている環境で動作するように作られています:
- 依存するものが少ない。最初のパスキーを登録する前に設定することは何もなく、ホスティング会社に
gmpを入れてもらう必要もありません。WebAuthn に必要な大きな数の計算には、gmpかbcmathが入っていればそれを使い、どちらもなければ PHP だけで計算します。署名の検証には OpenSSL を使います。WordPress のサイトヘルスでも確認されるモジュールの1つです。 - サイトの外に何も出ません。パスキーのやり取りは、ブラウザとご自身のサーバーの間だけで完結します。アカウントも API キーも不要で、ログインの経路に外部サービスは入りません。
- パスワードはそのまま使えます。無料版でパスワードログインが無効になることはありません。サイトを移行している途中で誰かが締め出されることもありません。
- 日本語 UI に対応。英語の原文とあわせて、すべて翻訳されています。
無料版でできること
- パスワードレスでフィッシングに強いログイン (WebAuthn / FIDO2)
- 同じ端末でのパスキー (Touch ID / Windows Hello / Face ID)
- ブラウザーが対応していれば、ブラウザー標準のパスキーフローで別の端末からログイン (スマートフォンで読み取り)。独自の QR 承認フローは Pro で利用できます。
- 任意のページに埋め込めるショートコードと Gutenberg ブロック (ログイン / パスキーの管理)
- 個々のパスキーの名前変更、一時停止、再開 — 一時的に手元にない端末を、認証情報を壊さずに遮断できます
- 管理者向けのサイト全体のパスキー一覧 (ユーザー -> パスキー)。所有者や名前で検索できます
- 2要素認証プラグイン (Wordfence Login Security、Two-Factor など) に対応。パスキーは第 2 要素として扱われ、より弱い代替のログイン手段にはサイトの 2要素認証が引き続き要求されます
- 登録・ログイン・削除の監査ログ。CSV として書き出せます
- WP-CLI コマンド、初回設定チェック、緊急時のバイパス用定数
- UI は完全に翻訳できます (原文は英語で、翻訳は translate.wordpress.org から提供されます)
ショートコード
任意の固定ページ、投稿、ウィジェットに埋め込めます。ブロックエディターでは「パスキーでログイン」「パスキーの管理」ブロックとしても使えます。
[rapls_passkey_login]— 未ログインの訪問者向けのパスキーログインボタン。redirect(成功後の遷移先 URL) とlabel(ボタンの文言) の属性に対応します。[rapls_passkey_register]— ログイン済みユーザーが自分のパスキーを登録・削除できる管理画面。
動作要件
- WordPress 6.0 以降
- PHP 8.2 以降
- HTTPS (localhost は例外)。これがないとブラウザが WebAuthn を拒否します
WordPress 自体の要件を超える PHP 拡張は不要です。
Rapls Passkey Pro
ここまでの機能はすべて無料で、これからも無料のままです。Pro は、最初のパスキーを
登録したあとに来る部分、つまりサイト全体を移行することと、端末をなくしたときの
入り口を確保しておくことを受け持つ、独立したアドオンです。
- 別の端末からのログイン — パソコンでのログインをスマートフォンから承認できます。QR コードと 4 桁の確認コードを組み合わせるため、コードを転送されても別の場所では使えません
- パスワードによらない復旧手段 — 一回限りのリカバリーコードと、メールのマジックリンクによるログイン
- 権限グループ単位の展開 — 選んだ権限グループにパスキーを必須にし、猶予期間を設けたうえで、全員の移行が済んだらパスワードログインを無効にできます
- 状況に応じたステップアップ認証 — 見慣れない場所からパスワードでログインされたときに、あらためてパスキーを求めます
- 認証器のポリシー — FIDO Metadata Service による検証、AAGUID の許可リストと拒否リスト、信頼済み端末の管理
- 運用 — セキュリティ Webhook、導入状況レポート、マルチサイトのネットワーク設定、WP-CLI
買い切りでサブスクリプションはありません。1 年間の更新と 14 日間の返金保証付きです。
詳細と価格
外部サービス
本プラグインは既定では外部サービスへ何も送信しません。自分で有効にしない限りオフのままの任意の連携が 1 つだけ、第三者と通信します:
Google reCAPTCHA v3 — パスワードログインに reCAPTCHA を有効にした場合にのみ使います。有効なときは、訪問者のブラウザーが https://www.google.com/recaptcha/api.js を読み込み、本プラグインは得られたトークンとリクエスト元の IP アドレスを https://www.google.com/recaptcha/api/siteverify へ送信し、Google がそのリクエストを採点します。オフの間は何も送信しません。このサービスは Google が提供しており、利用には Google の利用規約とプライバシーポリシーが適用されます:
- 利用規約: https://policies.google.com/terms
- プライバシーポリシー: https://policies.google.com/privacy
ほかのホストとは通信しません。必要な公開サフィックスリスト (data/public_suffix_list.dat) は取得せずに同梱しており、パスキーの手続きはブラウザーとご自身のサイトの間だけで完結します。
プライバシー
認証データはご自身のサイト内に保存されます。
保存される情報:
- パスキーの認証情報 (公開鍵、認証情報 ID、署名カウンター、ラベル、日時) を保存する専用のデータベーステーブル。
- ユーザーメタに保存されるユーザーごとの WebAuthn ユーザーハンドルと、そのアカウントがハンドルを持つことを記録するオプションテーブルの 1 行。ハンドルは本人に関する情報を一切含みません。このバージョン以降に作成されたアカウントでは、アカウント ID とサイト固有の秘密の値から導出します。すでにランダムなハンドルを持つアカウントは、それをそのまま使い続けます。
- パスキーのイベント (登録、ログイン、削除) を、操作したユーザー、IP アドレス、日時とともに記録する任意の監査ログ。
保存期間と削除:
- パスキーの記録は、ユーザーまたは管理者が削除するまで残ります。ユーザーを削除すると、そのパスキーの記録も削除されます。
- WordPress 標準の個人データのエクスポートおよび消去ツールと連携するため、ユーザーのパスキーと監査データはエクスポートおよび消去のリクエストに含まれます。
- プラグインをアンインストールする (「プラグイン」画面から削除する) と、専用テーブルとオプションを削除します。
本プラグインは追跡のための Cookie を使いません。ログインの手続き中に、短時間だけ有効な機能上必要な Cookie (2要素認証の保留中のログインなど) を設定するだけで、数分で失効します。
スクリーンショット








ブロック
このプラグインは2個のブロックを提供します。
- Sign in with a passkey
- Manage passkeys
インストール
- プラグインを
wp-content/plugins/rapls-passkeyに配置します。 - 「プラグイン」画面から「Rapls Passkey」を有効化します。
- プロフィール画面からパスキーを登録します。
ほかに必要なものはありません。アカウントも API キーも不要で、最初のパスキーを登録する前に設定しておくこともありません。設定画面には初回チェック (HTTPS、Relying Party ID、WebAuthn ライブラリ) が表示され、サイトの準備ができているかを確認できます。
FAQ
-
PHP 拡張は必要ですか ?
-
OpenSSL が必要です。パスキーの署名を検証するためのもので、WordPress のサイトヘルスでも確認されるモジュールの1つです。
gmpは不要です。WebAuthn に必要な大きな数の計算には、gmpかbcmathが入っていればそれを使い、どちらもなければ PHP だけで計算します。 -
はい。インストールが必要な拡張はなく、常駐するプロセスもありません。このプラグイン自身のテーブルとオプション以外には何も書き込みません。
-
どのブラウザと端末で使えますか ?
-
内蔵の認証器 (Touch ID・Windows Hello・Face ID) を備えた最近のブラウザ、または FIDO2 のセキュリティキーです。目の前の端末にそのサイトのパスキーがない場合は、ブラウザ標準の別端末連携で、手元のスマートフォンから読み取ってログインできます。
-
無料版に制限はありますか ?
-
いいえ。パスキーでのログイン、登録、管理、ショートコードとブロック、管理者向けの
パスキー一覧、二要素認証プラグインとの連携は、すべて無料版に入っています。上限も
試用期間もライセンスキーもありません。Rapls Passkey Pro は、端末をまたぐ QR
ログイン、リカバリーコード、権限グループ単位の適用といった別の機能を追加する
独立したアドオンです。ここまでに挙げた機能を使うために、Pro をインストールする
必要はありません。 -
使っているセキュリティプラグインと併用できますか ?
-
セキュリティプラグインと置き換えるのではなく、併用する前提で作っています。ログイン URL を変更するプラグインはそのまま機能し、パスキーのボタンは、サイトが実際に表示しているログイン画面に出ます。開発者自身のサイトでも、CloudSecure WP Security と併用して運用しています。セキュリティプラグインで REST API をログイン中のユーザーだけに制限している場合は、「設定」「Rapls Passkey」「REST API」で「REST API が制限されている場合のパスキーログイン」を有効にしてください。ログインする前にサインインを始められるようになります。Wordfence Login Security や Two-Factor を使っている場合、パスキーで2要素目の認証を満たせます。パスキーより弱い代替のログイン方法は、引き続きサイト自身の2要素認証を通る必要があります。
-
日本語で使えますか ?
-
はい。日本語訳は完成しており、WordPress.org が言語パックとして配信します。プラグインに翻訳ファイルを同梱していないため、プラグイン本体とは別に更新されます。
-
パスキーを失ってログインできなくなった場合は
-
パスキーと並行してパスワードログインも使えます。いつもどおりパスワードでログインし、プロフィール画面からパスキーを削除するか登録し直してください。
WP-CLI を使えば、サーバー側からパスキーを管理することもできます:
wp rapls-passkey list --user=admin wp rapls-passkey remove <id>緊急時は、wp-config.php に次の行を追加してください。このプラグインによるパスキーの必須化と2要素認証の確認をすべて無効にします。復旧したら削除してください:
define( 'RAPLS_PASSKEY_BYPASS', true ); -
ステージングサイトで作成したパスキーは、本番サイトでも使えますか ?
-
デフォルトでは使えません。パスキーは登録したドメインに紐付けられ、その紐付けはデータベースではなく認証器の中に保持されます。そのため、データベースを本番環境に移しても引き継がれません。staging.example.com で登録したパスキーは、example.com では候補に表示されません。
本番サイトで登録し直し、ステージングのパスキーは使い捨てとして扱うか、誰かが登録する前に両方のサイトで親ドメインを使うように設定するかのどちらかです:
add_filter( 'rapls_passkey_rp_id', function () { return 'example.com'; } );後者の場合、データベースを本番環境に移したあとも、ステージングで登録したパスキーは使えるままになります。残すつもりのなかったものも含めてです。localhost で作成したパスキーは、localhost でしか使えません。セットアップ画面に使用中の Relying Party ID が表示されるので、最初のパスキーを登録する前にこの点を決めておけます。
評価
貢献者と開発者
変更履歴
0.13.79
- 修正: サイトヘルスとセットアップ確認に、セキュリティプラグインが REST API を制限してもパスキーでのサインインは自動で対応する、と書かれていました。実際には対応しません。設定の「REST API」セクションにある「REST API が制限されている場合のパスキーログイン」が必要で、これは既定ではオフです。どちらの表示もそのとおりに直しました。
- 修正: readme に、Pro アドオンには AAGUID の許可リストと拒否リストがあると書かれていました。あるのは拒否リストです。
- Readme の Pro アドオンの説明に、アップデートに期限はなく、サポートは購入から1年間であることを明記しました。
0.13.78
- 短い説明を、このプラグインが何なのかを検索でよく使われる言葉で伝え、設定が不要なことと、パスワードでのログインもそのまま使えることが分かる文に変えました。
- 訂正: readme に、共用サーバーでは
gmpが入っていないことが多いこと、WordPress 自体の要件以外には何も必要ないことを書いていました。前者は実際に調べたものではなく、後者は OpenSSL を見落としていました。gmpは必須ではありません。計算には、これかbcmathがあればそれを使い、なければ PHP だけで行います。署名の検証をしているのは OpenSSL です。説明文と FAQ を、そのとおりの内容に直しました。 - セキュリティプラグインに関する FAQ に、実際に確認した内容 (CloudSecure WP Security でログイン URL を変更した場合) と、REST API をログイン中のユーザーだけに制限している場合に必要なこと (設定の項目を1つ有効にする) を書きました。確認していなかった画像 CAPTCHA についての記述は削除しました。
- 機能面の変更はありません。
0.13.77
- 短い説明の冒頭に、安心して試せるかどうかを左右する点を書きました: パスワードはそのまま使えるので端末をなくしても締め出されないこと、そして日本語 UI が完全に翻訳されていること。
- FAQ を追加: ステージングサイトで登録したパスキーが本番サイトで使えない理由と、2通りの対処法。パスキーを紛失したときの FAQ では、緊急用の定数が実際に何を無効にするかを明記しました。
- 説明文から操作解説の動画にリンクしました。
- 変更履歴から0.13.46–0.13.62が抜けていました。0.13.71でこの readme を短くした際にこれらの項目を削除し、changelog.txt を参照するよう案内していましたが、実際にはそちらに追加されていませんでした。履歴から復元し、この readme には最新のリリースだけを載せるようにしました。
- 機能面の変更はありません。
0.13.76
- パッケージングに関する修正 : リリースされたパッケージにおいて (そこだけに限って) 、すべての証明書署名検証に失敗していました。このプラグインをビルドすると、同梱されたライブラリがプライベートな名前空間に書き換えられるため、同じライブラリを含む別のプラグインと衝突することがありません。この処理により、名前空間付きのクラス名のような形式のテキストがすべて書き換えられてしまいます。クラス名ではないものの、その形式を持つテキストが1つありました。それは、証明書の有効期限が記述される形式である
ymdHis\Zです。その結果、証明書内の日付が別の形式に展開されて書き換えられ、バイト列が認証局が署名した内容と一致しなくなったため、すべての証明書が検証不能と報告されました。サインインや登録では証明書の検証が行われないため、パスキー自体には影響がありませんでしたが、 Pro アドオンの FIDO メタデータ更新機能では検証が行われ、「証明書チェーンが信頼できる FIDO ルートまで検証されません」というエラーが報告され、本来は正しいはずの信頼アンカーが誤って指定されていました。 - この問題を発見できたはずのチェックが省略されていました。ビルド済みのパッケージに対してテストスイートを実行したところ、バンドルされたライブラリを元の名前で必要としているという理由で問題視されませんでしたが、実際にはそうではありません。プラグインは自身のコードを通じてのみそれらのライブラリにアクセスしているからです。現在はパッケージに対してテストが実行され、パッケージング工程での書き換えも直接検証されるようになったため、変更されるべきではない文字列がそのまま残ってしまった場合は、リリースではなくテストの失敗として扱われます。
0.13.75
- 翻訳のみの変更: 日本語カタログのうち、WordPress 日本語スタイルガイドから外れていた箇所を修正しました。日本語では半角数字の前後にスペースを入れないため、「0 は無制限です」は「0は無制限です」になります。また長音の規則をそのまま当てると短い形になりますが、用語集が優先されるため「ブラウザー」「サーバー」「ユーザー」としました。293件、コードの変更はありません。
- tests/smoke-ja-style.php で両方を検査するようにしました。あわせてもう1点、translate.wordpress.org は、訳文の先頭の文字種が原文と異なる場合に警告を出します。日本語の語順では自然にそうなり、「Enable reCAPTCHA」は「reCAPTCHA を有効にする」になります。アップロード時ではなく、ここで拾うようにしました。
バージョン0.13.72以前のリリースの変更履歴は changelog.txt をご覧ください。
