在企業安裝 GitHub App,不代表能讀取所有儲存庫程式碼
讀取公司設定的指令碼,有時仍依賴一位離職同事的個人權杖。GitHub 在10月23日宣布 GitHub Apps 企業安裝正式推出,更多管理流程可以從 classic PAT 遷移。不過,「安裝到企業」不等於能讀取企業內全部程式碼。
企業應用程式能管理什麼
公告涵蓋儲存庫原則、ruleset、讀取略過申請,以及 IP 允許清單等管理功能。例如,彙整略過申請供審核的應用程式,可以考慮 Enterprise bypass requests 的讀取權限。查看申請與修改規則需要不同權限,無須一次開啟所有寫入權限。
企業安裝只授予企業權限。即使應用程式註冊時也申請組織或儲存庫權限,這次安裝仍不會授予。要讀取兩個組織的程式碼,必須分別安裝,並給予適當的儲存庫存取權。因此,讀得到企業設定卻讀不到程式碼,不一定是安裝失敗。
同一應用程式可以有多個安裝
假設企業 acme 有 web 與 mobile 兩個組織。同一應用程式安裝到三個帳戶,就會有三個安裝。企業安裝權杖不能取代 web 權杖,web 權杖也不能跨到 mobile。下圖是為了說明虛構例子而自行繪製,並非真實 GitHub 介面。

因此,權杖快取不宜只以應用程式名稱作為鍵。加入 installation ID,有助於避免企業原則工作與儲存庫讀取工作誤用相同權杖。這是把文件中的帳戶邊界反映到程式結構的實作例子。
應用程式與使用者權限的交集
使用者存取權杖同時受應用程式與使用者權限限制。如果使用者只能讀取,即使應用程式能寫入,也無法代表該使用者越權執行。安裝存取權杖則依照該安裝獲得的應用程式權限運作。
簽發安裝權杖需要應用程式 JWT 與目標 installation ID。文件說明了 POST /app/installations/INSTALLATION_ID/access_tokens,以及一小時有效期限。Octokit 能協助產生與到期後重新產生。短期權杖仍需要保護私鑰,並依安裝區分快取。

替換個人權杖之前
如果舊指令碼同時查詢企業原則與多個組織的程式碼,只替換權杖字串可能不夠。應拆分工作,確認每個 API 是否支援 GitHub Apps,以及需要哪種驗證方式。不是所有企業 GraphQL 操作都支援應用程式。先遷移讀取工作,比較容易對照結果與存取邊界。
資料更新也有時間差:10月23日的 changelog 寫明正式推出,但今天查看的安裝文件仍保留 public preview 字樣。本文以有日期的公告判斷發布階段,以文件說明權限範圍。核心價值是按照帳戶與工作設計自動化,而不是複製某個人的全部廣泛權限。
來源與延伸閱讀
GitHub Docs · Enterprise installation