← ブログ一覧
サブ記事

GitHubにワークフローをpushできない——OAuth Appのscope制限にハマった話

.github/workflows/へのgit pushが「without workflow scope」で拒否され続けた原因と、Web UIで解決した記録


登場人物

  • リナ社長 … 高校生なのに会社経営するやり手ギャル。テックにも強くてAI活用が得意。
  • タクヤ … 入社3年目の男性社員。真面目で少しだけコードが書ける。

今回は、.github/workflows へのpushが拒否され続けたOAuth scope事件の顛末回。


予約投稿を自動化しようとしたら詰まった

jinbei-labに予約投稿機能を実装した。仕組みはシンプルで、GitHub Actionsで毎朝9時(JST)に空コミットをpushしてCloudflare Pagesの再ビルドをトリガーする。

ワークフローファイルを用意してgit pushしたら、こんなエラーが出た。

! [remote rejected] master -> master
(refusing to allow an OAuth App to create or update workflow
`.github/workflows/scheduled-deploy.yml` without `workflow` scope)

「workflowスコープがない?PATを作ってスコープつけたじゃん」とリナ社長。

「でも直らないですね……」とタクヤ。


原因——OAuth AppはworkflowスコープNG

GitHubの認証方式には大きく2種類ある。

認証方式workflow scope
OAuth App(ツール連携)付与できない(GitHub側が禁止)
Personal Access Token(PAT)付与できる

Claude CodeやCloudflareなどのツールがgit操作に使うトークンはOAuth App形式。GitHubはセキュリティ上の理由から、OAuth Appに workflow スコープを渡すことを禁じている。

「でも、なんでOAuth Appだけダメなの?」とタクヤ。

「ワークフローファイルって、CIで好きなコードを実行できる入口じゃん。しかもActionsからはリポジトリのSecretにも触れる。そこを外部連携アプリのトークンで書き換えられたら、乗っ取られたときの被害がでかすぎるの。だからGitHubは『workflowだけは外部OAuthに渡さない』って線を引いてるんだよね」とリナ社長。

「なるほど、サプライチェーン攻撃を防ぐための制限なんですね」とタクヤも納得した。

つまり、どれだけ新しいPATを発行してWindowsの資格情報マネージャーに登録しても、gitは先に登録されたOAuth Appのトークンを優先して使い続けるため、エラーは消えない。

「PATを作ったのに意味なかったの?」

「今回の問題には効かなかったですね。古いOAuthトークンが上書きされてなかった」


どのトークンが実際に使われているか確認する

「自分のPATが使われてないって、どうやって気づくの?」とリナ社長。

push時にgitがどのcredentialを参照しているかは、設定とWindowsの資格情報マネージャーを見ればわかる。

確認したいことコマンド/場所
どのcredential helperが有効かgit config --get credential.helper
保存済みのGitHub資格情報Windows「資格情報マネージャー」→ Windows資格情報 → git:https://github.com

「古いOAuthトークンが資格情報マネージャーに残ってると、新しく作ったPATを登録しても、gitはそっちを先に拾っちゃう。だから”PATを作る”だけじゃなくて”古いのを消す”までやらないと切り替わらないんだよね」とリナ社長。

「今回はそもそも .github/workflows/ がOAuthでは触れないので、PATへ切り替えても遠回りでしたね」とタクヤ。

「そ。だから一番速いのはWeb UIで直す、ってオチになるわけ」


解決策——GitHub Web UIで直接編集

.github/workflows/ 配下のファイルはWeb UIから作成・編集すればOK。ブラウザ経由の操作はOAuth制限を受けない。

  1. https://github.com/{org}/{repo}/new/master でファイルを作成
  2. パスに .github/workflows/scheduled-deploy.yml と入力
  3. 内容を貼り付けて「Commit changes」

「ブラウザから直接やれば良かっただけじゃん」とリナ社長。

「そうなんですよ。gitのcredential経由でpushしようとしたのが間違いでした」


教訓

.github/workflows/ を変更するときは最初からGitHub Web UIを使う。PATの再発行やWindows資格情報マネージャーの更新で解決しようとしても、OAuth Appが使われている限り無駄になる。

エラーメッセージに「OAuth App」と書いてある時点で、credential側を直す方向ではなくWeb UIに切り替えるのが正解。

コメント