cd /workspace
make start- ブラウザで
http://localhost:8080/Ploneにアクセス - 既存ユーザーでログイン(例:
admin) - パスキー登録ページにアクセス:
http://localhost:8080/Plone/@@passkey-register - 表示されたフォームで「Register Passkey」をクリック
- ブラウザのパスキー登録プロンプトに従う
期待される結果:
- ✅ パスキーが登録される
- ✅ 成功メッセージが表示される
- ✅ 監査ログに記録される
- Ploneの標準ログアウト機能を使用
- Cookie
__acが削除されることを確認
http://localhost:8080/Plone/@@passkey-loginにアクセス- ユーザー名を入力(例:
admin) - 「Login with Passkey」をクリック
- ブラウザのパスキー認証プロンプトに従う
期待される結果:
- ✅ パスキー認証が成功
- ✅ ログインページから自動的にリダイレクト
- ✅ ログイン状態になる
- ✅ Cookie
__acが設定される
- ログイン後、別のページに移動(例:
http://localhost:8080/Plone/folder_contents) - 期待される結果: ログイン状態が継続している ✅
- ページをリロード(F5 または Cmd+R)
- 期待される結果: ログイン状態が継続している ✅
- ブラウザを完全に閉じる
- ブラウザを再起動し、
http://localhost:8080/Ploneにアクセス - 期待される結果: ログイン状態が継続している ✅
- ※Cookieの有効期限: 7日間
- 開発者ツールを開く(F12)
- 「Application」タブ → 「Cookies」 →
http://localhost:8080 __acCookieを確認
期待される状態:
Name: __ac
Value: %EB%3C%... (長いURL-encodedの値)
Path: /
HttpOnly: ✓ (チェック)
Secure: (空白)
SameSite: (デフォルト)
tail -f var/log/instance.log | grep -E "AAL2|authentication|ticket"期待されるログ:
INFO [c2.pas.aal2.plugin:824] Set AAL2 authentication cookie for user admin (IP: 127.0.0.1)
INFO [c2.pas.aal2.browser.views:328] Called AAL2Plugin.updateCredentials() for user admin
DEBUG [c2.pas.aal2.plugin:141] Valid authentication ticket for user admin
DEBUG [c2.pas.aal2.plugin:162] Authenticated user admin via AAL2 ticket
確認:
- ブラウザ開発者ツールで
__acCookieの存在を確認 - サーバーログで
Set AAL2 authentication cookieを確認
原因の可能性:
- Cookieが設定されていない →
updateCredentials()が呼ばれていない - Cookieが読み取れない → パス設定の問題
解決策:
# views.py で確認
plugin.updateCredentials(self.request, self.request.response, user_id, '')ログ:
DEBUG [c2.pas.aal2.plugin] Invalid authentication ticket
原因の可能性:
- IPアドレスの変更(プロキシ経由など)
- チケットのタイムアウト(7日間)
- Plone再起動後のシークレット再生成
解決策(一時的・開発環境のみ):
# plugin.py の validateTicket() で IP チェックを無効化
result = validateTicket(
secret=secret,
ticket=ticket,
ip="0.0.0.0", # IPチェック無効化
timeout=86400 * 7,
)確認:
# ZMI でプラグインオブジェクトを確認
http://localhost:8080/Plone/acl_users/aal2_plugin/manage_main解決策:
- トランザクションコミットを確認
self._p_changed = Trueが設定されているか確認
原因:
- IPアドレス経由でアクセスしている(例:
http://192.168.1.10:8080)
解決策:
http://localhost:8080またはhttp://127.0.0.1:8080を使用- または HTTPS を設定
- パスキー登録が成功する
- 登録したパスキーがデータベースに保存される
- パスキーログインが成功する
- ログイン後、
__acCookieが設定される
- ログイン後、別ページに遷移してもログイン状態が継続
- ページリロード後もログイン状態が継続
- ブラウザ再起動後もログイン状態が継続(7日間以内)
- Cookie が
HttpOnlyである - 異なるIPアドレスからのアクセスで検証が失敗する(IPチェック有効時)
- タイムアウト後(7日後)にチケットが無効になる
- パスキー登録イベントがログに記録される
- パスキーログイン成功イベントがログに記録される
- ログイン失敗イベントがログに記録される
- 無効なパスキーでログインしようとすると適切なエラーが表示される
- 存在しないユーザーでログインしようとすると適切なエラーが表示される
- 改ざんされたCookieは検証エラーになる
テスト方法:
# Apache Bench で負荷テスト
ab -n 1000 -c 10 -C "__ac=<valid_cookie_value>" http://localhost:8080/Plone/期待される結果:
- Cookie検証によるオーバーヘッドは最小限(< 10ms)
このガイドに従ってテストを実施し、すべての項目が ✅ になれば、パスキーログインとセッション永続化が正しく動作しています。
問題が発生した場合:
- サーバーログを確認
- ブラウザ開発者ツールでCookieを確認
- 上記のトラブルシューティングを参照
作成日: 2025-11-10 作成者: Claude Code