Skip to content

security: セッション ID 方式(Opaque Token + DB)への移行 #69

@Reeeid

Description

@Reeeid

背景

現在(ADR 014)は JWT を httpOnly Cookie に格納するステートレス方式を採用。
MVP としては十分だが、以下のリスクが残る。

  • ログアウト後もサーバー側で JWT を即時失効できない(有効期限まで有効)
  • トークン盗取時に有効期限内は悪用可能

方針

JWT をやめて セッション ID(Opaque Token)方式に移行する

実装内容

  • sessions テーブル追加(session_id: str PK, user_id: FK, expires_at, created_at)
  • Alembic マイグレーション追加
  • crud/session.py 追加(create / get / delete)
  • auth.py のコールバックを JWT 発行 セッション ID 発行に変更
  • dependencies/auth.py を Cookie のセッション ID DB 照合に変更
  • GET /auth/logout でセッション DB レコードを削除(即時失効)
  • PyJWT 依存を pyproject.toml から削除
  • ADR 014 更新

現状 vs 移行後

JWT(現状) セッション ID(本 Issue)
即時失効 x o
追加インフラ なし sessions テーブル
PyJWT 必要 不要

関連

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions