← 活動記録一覧

FACTUAL ACTIVITY RECORD · 実際の作業をもとにした活動記録

期限切れAuth sessionの復元を修正する

Startup refresh、single-flight retry、失効時のKeychain削除を一つのlifecycleへ揃える

対象期間:

目的

Control CenterはKeychainに保存済みsessionがあると、有効期限を確認せず管理画面へ進み、直後のAPI requestが期限切れJWTで拒否されていた。Refreshに成功した場合だけログイン状態を復元する必要があった。

実装

ControlCenterCore/remote control clientにAuth session lifecycleを実装した。起動時は保存sessionをそのまま信用せず、refresh tokenで更新し、administrator metadataを再確認してから新sessionをKeychainへ保存する。Refreshが拒否された場合は古いsessionを削除してlogin画面へ戻す。

API利用中の401はsingle-flight refresh後に1回だけretryし、同時requestが複数のrefreshを発生させない。Logoutはremote tokenがすでに失効していてもlocal Keychain sessionを削除する。認証session lifecycle testに成功、拒否、同時request、logoutの回帰testを追加した。

保存session、refresh、Keychain削除の復元判定

図を描画しています…

確認したこと

確認結果

Refresh成功前に管理画面へ進まないこと、拒否時に保存sessionを削除することをtestで確認した。

401後のretryが1回に限定され、同時requestでもrefreshが1回だけになることを確認した。

Swift 20件、TypeScript 43件とrepository全体の検証が成功した。実時間経過によるprovider session expiryはcutoff内で観測していない。

完了とした根拠

Startup、API 401、同時request、logoutを一つのAuth lifecycleで扱い、期限切れsessionを無条件復元しないことをtestで固定して完了とした。