OAuth戻りでログインが維持されない時の診断手順
「IdP認証は成功するのに、戻り先で未ログインになる」症状は、SameSite と Cookie属性の不整合が主因です。トークン処理より先に Cookie配送条件を確認してください。
症状の定義
- OAuth/OIDC の callback URL へ戻るとセッションが消える
- 同一サイト内遷移では問題ないが外部経由だけ失敗する
- ブラウザや環境(本番/検証)で再現率が変わる
診断ステップ(推奨順)
- 1) Set-Cookie Inspect で callback 直前/直後の属性差を確認する(SameSite/Secure/Path/Domain)
- 2) SameSite Cookie Simulator で top-level URL と request URL を使い送信可否を再現する
- 3) Cookie Domain/Path Matcher で callback URL に対する一致条件を確認する
- 4) Set-Cookie Conflict Checker で同名Cookieの競合(旧Path/旧Domain残存)を検出する
- 5) Cookie Security Audit で SameSite=None + Secure などの安全要件を監査する
主な原因パターン
- SameSite=Lax/Strict のままで cross-site callback に乗らない
- SameSite=None を設定したが Secure が無くブラウザに受理されない
- callback パスに一致しない Path 指定になっている
- 旧cookieと新cookieの同名競合で予期しない値が送信される
- Host/Origin の差(www有無、サブドメイン差)で host-only cookie が一致しない
修正指針(運用)
- IdP経由が必須のフローは SameSite=None; Secure を前提に設計する
- Path/Domain は callback を含む最小範囲で統一し、旧cookieを明示的に削除する
- 同名を使う場合は用途別プレフィックスで責務を分離する(例: sid_app / sid_admin)
- 本番相当のHTTPS + 実ドメインで回帰テストを行い、ブラウザ差分を確認する
診断で使うツール
- Set-Cookie Inspect
- SameSite Cookie Simulator
- Cookie Domain/Path Matcher
- Set-Cookie Conflict Checker
- Cookie Security Audit
- Host/Authority/Origin Inspect
- Set-Cookie Not Persisted Diagnostic
FAQ
- ローカルでは成功するのに本番で失敗するのはなぜですか?
- 本番ではHTTPS・実ドメイン・CDN・IdP本番ドメインなど条件差が大きく、SameSiteやhost-only一致の問題が顕在化しやすくなります。
- SameSite=None にしたのに失敗する場合は?
- Secure不足、Path/Domain不一致、同名競合、ブラウザの追跡防止制限を順に確認してください。
参照仕様
次に見る(診断順)
site_map ルールに基づいて、次に確認すべきページを表示しています。
- Set-Cookie Inspect — Set-Cookie 属性を解析して配布方針を確認
- SameSite Cookie Simulator — SameSite と文脈からCookie送信可否をシミュレーション
- Cookie Domain/Path Matcher — Domain/Path/Secure 条件でCookie送信可否を判定
- Set-Cookie Conflict Checker — 同名Cookie競合と上書きリスクを検出
- Cookie Security Audit — Secure/HttpOnly/SameSite を監査
- Host/Authority/Origin Inspect — Host/:authority/Origin/Referer を照合して不整合を確認
- Set-Cookie が保存されない時の診断手順 — Domain/Path/Secure/SameSite を順に確認して Cookie 非保持の原因を切り分ける
- Cookie障害の運用チェックリスト — 保存失敗・OAuth戻り失敗・同名競合を一本化し、トリアージから恒久対策まで運用手順を標準化する
同テーマの導線
事例クラスタ一覧
実運用トラブル別に、最短の診断ルートへ入るためのシナリオ集
- 症状別診断ガイド(入口) — キャッシュ/CORS/JWT/MIME系の実運用トラブルを、症状起点で最短導線に振り分ける総合ハブ
- 304が返らない時の診断手順 — ETag / Last-Modified と If-* の往復を確認して 304 不発を切り分ける
- 更新したのに反映されない時の診断手順 — HTML/API/静的アセット別にキャッシュ方針を確認し、反映遅延を短時間で切り分ける
- CORS preflight失敗時の診断手順 — OPTIONS応答、Allow-*、Origin条件を順に確認して preflight 失敗を解消する
- JWT 401/403 切り分け手順 — Authorization / WWW-Authenticate / claims / 署名検証を連携して 401 と 403 を分離する
- 429/503で再試行が止まらない時の診断手順 — Retry-After の秒/日時解釈とクライアント実装差を切り分け、過剰再試行を抑える
- nosniffでJS/CSSがブロックされる時の診断手順 — Content-Type と nosniff の不一致、404/302混入、配信経路の上書きを切り分ける
- Set-Cookie が保存されない時の診断手順 — Domain/Path/Secure/SameSite を順に確認して Cookie 非保持の原因を切り分ける
- 同名Cookie競合で不安定な時の診断手順 — 同名CookieのPath/Domain差分・上書き順・送信衝突を整理して不安定挙動を解消する
- Cookie障害の運用チェックリスト — 保存失敗・OAuth戻り失敗・同名競合を一本化し、トリアージから恒久対策まで運用手順を標準化する