発生日: 2026-09-06
■ 症状
Box Drive の「ログイン」→ ブラウザで認証 → Box Drive のログイン画面に戻る、を繰り返す。
Box Drive のログには毎回 pkce_verification_failed が記録される。
POST https://api.box.com/oauth2/token
→ {"error":"pkce_verification_failed",
"error_description":"PKCE verification has failed"}
■ 追跡した認証フロー(ブラウザ履歴より)
1. account.box.com/api/oauth2/authorize
state=<uuid>
code_challenge=<43文字>
code_challenge_method=S256
client_id=86xa1h4ghg1wmworl48by1pysmv076uf
redirect_uri=boxdrive://oauth2_redirect
→ PKCE パラメータは正しく付与されている
2. account.box.com/integrations/googleplus/ensureValidBrowser
→ /integrations/googleplus/beginAuthorization
→ accounts.google.com/o/oauth2/v2/auth (Googleアカウント連携で認証)
3. account.box.com/integrations/googleplus/oauth2Redirect
authuser=0, hd=toggle.co.jp, prompt=none (ドメインは正しい)
4. app.box.com/api/oauth2/authorize
→ ★クエリパラメータが空。code_challenge が失われている
5. boxdrive://oauth2_redirect?state=<uuid>&code=<code>
→ state は保持されて戻る(=認証自体は成功している)
6. トークン交換で PKCE 検証に失敗
■ 切り分け済み(すべて同一エラーで再現)
・別のPCでも再現 → クライアント環境依存ではない
・Box Drive 2.53.223 / 2.54.169 の両方
・Chrome / Edge の両方
・Cookie・履歴が一切ない新規ブラウザで、Googleにパスワード認証しても再現
・Googleサインイン時のドメインは全試行で hd=toggle.co.jp(アカウント不一致ではない)
・プロキシ / SSL検査を行うセキュリティ製品 / hosts改変 / ブラウザポリシー:いずれも無し
・ブラウザ版 app.box.com へのログインは同一アカウントで正常
(=アカウント自体は健全。デスクトップのPKCE経路のみ失敗)
■ 見解
Google アカウント連携(/integrations/googleplus/)の往復から復帰する際、
Box が authorize リクエストの PKCE チャレンジを引き継がずに認可コードを発行しているため、
デスクトップアプリ側のトークン交換が必ず失敗する。
state は保持されるが code_challenge のみ失われている点が根拠。
■ 回避策の依頼(いずれか)
(A) toggle.co.jp を Box の SAML シングルサインオン構成に変更する
SAML SSO は googleplus 連携とは別のコードパスのため、回避できる可能性が高い。
(B) 当該ユーザーに Box パスワードでのログインを許可する
Google への往復が発生しなくなるため PKCE が維持される。
■ 業務影響
ブラウザ版は利用可能なため、影響はデスクトップアプリのみ。
