<style>
.gt-hero{padding:clamp(24px,5vw,48px);border-radius:24px;color:#fff;background:linear-gradient(120deg,#182436,#315577 54%,#5d9da7)}.gt-hero h2{color:#fff;margin:.3em 0}.gt-kicker{font-size:.8rem;font-weight:800;letter-spacing:.12em;color:#bfeaf5}.gt-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:22px 0}.gt-card{padding:17px;border-radius:15px;border:1px solid #c9dce5;background:#f2f8fb}.gt-card strong{display:block;color:#2d6179;font-size:1.1rem}.gt-table{overflow-x:auto;margin:20px 0}.gt-table table{min-width:650px;width:100%;border-collapse:collapse}.gt-table th,.gt-table td{padding:11px;border:1px solid #cbd6de;text-align:left;vertical-align:top}.gt-table th{background:#e9f3f8}.gt-note{padding:16px 19px;border-left:5px solid #dd9140;border-radius:10px;background:#fff6e9;margin:20px 0}.gt-bars{margin:20px 0;padding:18px;border:1px solid #c9dce5;border-radius:16px;background:#f2f8fb}.gt-bar{height:26px;border-radius:7px;background:#4a829b;margin:8px 0 15px}.gt-bar.old{width:8%;min-width:34px}.gt-bar.new{width:100%;background:#2b7569}@media(max-width:760px){.gt-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
</style>
DEVELOPMENT / DEVOPS
認証は同じ、文字列の長さは別物
GitHub Appのインストールトークンが新形式に切り替わった。APIの権限が変わらなくても、40文字固定を前提にしたCI、DB、プロキシ、ログ処理は予期せず失敗し得る。
3行で要約
- GitHubは2026年10月2日、4月27日に始めたGitHub Appインストールトークンのステートレス形式への段階的展開が完了したと発表した。新規発行トークンは原則
ghs_APPID_JWT 形式になる。[¹]
- 長さは従来の約40文字から約520文字へ。権限、対象リポジトリの絞り込み、1時間の有効期限、発行REST APIのエンドポイントは変わらない。[¹]
- 一時的な形式指定ヘッダー
X-GitHub-Stateless-S2S-Token は11月30日に廃止予定。固定長検証、保存列、HTTPヘッダー、ログ秘匿の4箇所を先に点検したい。[¹]
背景:トークンの中身に依存すると壊れる
GitHub Appはインストール先のリポジトリへアクセスするため、短時間有効なアクセストークンを発行する。従来の ghs_ で始まる短い文字列を見て、アプリ側が「40文字である」「英数字だけである」と決め打ちしていることがある。しかしトークンは本来、中身を解釈しない不透明な文字列として扱うべきものだ。GitHubの初回案内も、新しいJWT部分をクライアントが解析・検証しないよう明記している。[³]
何が新しいのか
4月からの段階的な展開が10月2日に完了した。新規に発行される対象のインストールトークンは原則、新しいステートレス形式になる。発表日と変更開始日は異なる。また、変更前に発行済みのトークンは期限まで利用できる。[¹][³]
文字列長の目安旧形式:約40文字
新形式:約520文字
長さは概数。新形式は内容により変動する。[¹][³]
変わった点・変わらない点| 項目 | 2026年10月の状態 | 運用上の意味 |
|---|
| 形式と長さ | ghs_APPID_JWT、約520文字 [¹] | 40文字固定の制約を撤去 |
| 権限・対象リポジトリ | 変更なし [¹] | 権限設定の全面的な作り直しは不要 |
| 有効期限 | 1時間のまま [¹] | 再発行・更新設計は維持 |
| 発行API | エンドポイント変更なし [¹] | 既存の呼び出し先を維持 |
技術的な点検ポイント:4つの破損箇所
1 検証40文字固定の正規表現
2 保存DB列・シークレットストア
3 送信プロキシ・認証ヘッダー
4 秘匿ログのマスク規則
新形式はJWT形状でも、アプリが署名やペイロードを自前で信用・解析する設計に変えない。認証は従来どおりGitHub APIへトークンを渡し、権限の判断はGitHubに任せる。[³] GitHub公式のチェックリストも、固定長検証、小さい保存領域、長いAuthorizationヘッダーを拒む中継機器、旧形式しか伏せないログ処理を挙げている。[¹]
開発・運用の実践例
まず自社のGitHub App・Actionsで、トークンを受け渡す場所を一覧化する。コード検索では ghs_、40、Authorization、X-GitHub-Stateless-S2S-Token を手掛かりにする。ただし検索結果にトークン実値を出力・保存しない。DBの列長や秘密情報ストア、リバースプロキシの上限も設定画面で確認する。
次に、検証環境で新規トークンを発行し、API呼び出し、保存・再取得、ログの伏字まで一連で確認する。認証トークンはログへ残さず、成功可否やHTTPステータスだけを記録する。最後に、両形式への対応を確認したうえで一時的な形式指定ヘッダーを削除する。GitHubは11月30日以降、このヘッダーを尊重しないと案内している。[¹]
リスクと限界
「形式変更」は権限強化の保証ではない。権限・対象リポジトリ・有効期限は従来どおり。トークンを漏らさない保管、必要最小限の権限、期限切れ後の再発行は引き続き必要だ。[¹]
- 新形式の長さは「約520文字」で固定値ではない。保存列を520文字ちょうどに決め打ちするのではなく、余裕を持たせる。[¹][³]
- ステートレスJWTの内容をアプリ側で検証する用途には使わない。[³]
- 4月の予告はGitHub Enterprise CloudとData Residencyを対象とし、GitHub Enterprise Serverは当時の変更対象外と説明した。自身の環境・バージョンに適用されるかは最新資料で確認する。[³]
今後注目すべき点
11月30日の一時ヘッダー廃止前に統合テストを終えたい。今後のトークン形式変更に備え、文字数・内部構造の仮定を設計から外し、認証失敗率とログ秘匿テストを継続するのが実務的だ。
最終確認日:2026年10月4日(日本時間)
参照元
- GitHub Changelog:ステートレス形式の展開完了(2026年10月2日)
- GitHub Docs:インストールアクセストークンの発行
- GitHub Changelog:新形式の初回予告(2026年4月24日)