Skip to content

[P2][Security] Better Authとapp JWTのsecretを安全に分離する #58

Description

@yufoxda

問題

環境テンプレートは BETTER_AUTH_SECRET を定義する一方、Better Authの実装は独自app-authorization JWTと同じ JWT_SECRET を使用している。設定ドキュメントと実装が一致せず、鍵を分離・個別ローテーションできない。

リスク

  • 片方の鍵漏えいがBetter Auth sessionと独自JWTの両方へ波及する。
  • 新規環境はテンプレート通りに設定しても、コードが要求するJWT_SECRET不足で失敗し得る。
  • 直ちに参照先を切り替えると、既存session失効や本番のsecret未設定を起こし得るため、段階移行が必要。

実施案

  1. staging/productionでsecret名の設定有無だけを確認する(値は記録しない)。
  2. BETTER_AUTH_SECRET ?? JWT_SECRET の移行期間を設け、旧構成を壊さない。
  3. stagingで別鍵を設定し、login/session refresh/sign-out/custom JWTを検証する。
  4. productionへ設定し、既存session失効の影響と告知方針を決めて切り替える。
  5. 移行後はBETTER_AUTH_SECRETを必須化し、型・env example・runbookを一致させる。
  6. 両鍵の個別rotation手順と回帰テストを追加する。

受入条件

  • Better Authとapp JWTが別鍵を使用する
  • 未設定時の起動失敗が明確で、secret値をlogしない
  • HTTPS/localhost cookie、login、session、sign-out、JWT検証がテスト済み
  • staging/productionのrotation手順とrollback条件が記録される
  • env example、Cloudflare secret設定、型定義が一致する

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions