為什麼臨時關閉可能留下存取權
當你需要快速暫停某個整合時,顯而易見的做法是暫停或解除安裝它。這處理了安裝端。它不會自動處理授權端,那是另一項授予,擁有者也不同。
暫停已安裝的 GitHub App 會暫時封鎖對該安裝帳號所擁有資源的存取。來源
這個區別很重要,因為一個 GitHub App 可以同時持有兩種存取權:對帳號資源的安裝存取權,以及代表個人行事的授權。暫停其中一個並不會暫停另一個。
暫停並不會移除應用程式代表使用者行事的另一項授權。來源
安裝存取權與使用者授權的差異
使用下表來判斷你實際需要變更哪個層面。
| 你想停止的事項 | 應檢查的層面 | 暫停的作用 | 暫停不會做的事 |
|---|---|---|---|
| 應用程式存取安裝帳號所擁有的資源 | 該帳號上的安裝項目 | 暫時封鎖該安裝項目的存取 | 移除使用者授權 |
| 應用程式代表個人行事 | 該使用者的「已授權的 GitHub App」 | 本身不會有任何作用 | 停止使用者層級的授權 |
| 針對單一帳號的兩者 | 兩個層面 | 僅涵蓋安裝端 | 讓另一項授予保持原狀 |
GitHub App 不是一個可以直接登出的活躍瀏覽器工作階段。暫停安裝項目是對資源的帳號層級控制;取消授權則是對委派行為的使用者層級控制。它們分開管理,也應分開驗證。
臨時關閉的實用檢查清單
- 先釐清目標。 決定你是要暫停應用程式對帳號資源的存取、停止它代表使用者行事,還是兩者都要。答案決定你該處理哪個層面。
- 處理安裝項目。 在擁有你想保護之資源的帳號上暫停安裝項目。將此視為暫時且可逆的動作。
- 另外檢查使用者端。 如果應用程式曾被授權代表你行事,而你想停止這點,請前往「已授權的 GitHub App」並在那裡取消授權。不要假設暫停已涵蓋此事。
- 記錄你變更了什麼、在哪裡變更。 記下你暫停了哪個帳號的安裝項目,以及你移除了哪些使用者授權(如果有的話)。這能防止日後清理時遺漏兩者之一。
- 刻意復原。 如果暫停是暫時的,請先確認使用者授權是否也應一併恢復,再重新啟用安裝項目。
解除安裝比暫停更徹底,但仍有範圍限制
如果暫時暫停不夠,而你想讓安裝項目消失,解除安裝是安裝端更強力的動作。它本身仍然不會觸及使用者授權。
解除安裝會移除該帳號的安裝存取權;當擁有者想停止應用程式代表其行事時,在「已授權的 GitHub App」中取消授權是另一個獨立動作。來源
實際後果是:解除安裝後,如果擁有者也想讓應用程式停止代表其行事,請檢查「已授權的 GitHub App」。移除一個連線並不證明另一個也已消失,而一個不再出現在某處的應用程式,可能仍持有另一項授予。
常見的失敗路徑
- 假設暫停等於完全撤銷。 它只封鎖安裝項目的資源存取。使用者授權會一直存在,直到你處理它為止。
- 把取消授權當成解除安裝。 取消授權會停止應用程式代表你行事,但帳號上的安裝項目可能仍然存在。請判斷你的關閉動作實際需要哪一個。
- 清理了一個帳號卻忘了另一個。 安裝項目屬於帳號;授權屬於使用者。只指名一個層面的關閉計畫,通常會讓另一個層面保持原狀。
- 太早重新啟用。 如果你是暫停而非解除安裝,在檢視使用者端之前恢復安裝項目,可能會恢復資源存取權。
在宣告完成前驗證兩個層面
只有當你打算變更的每個層面都已按各自標準檢查過,關閉才算完成。先在擁有帳號上確認安裝狀態,再在「已授權的 GitHub App」中為相關使用者確認授權狀態。不要從一個推斷另一個,也不要把應用程式描述為已登出——它從來就不是瀏覽器工作階段。
如果你下一個任務是移除較舊的 OAuth 授予,並想將它與登入工作階段分開,相關指南撤銷舊的 GitHub OAuth 應用程式而不與登入工作階段混淆涵蓋了那個不同的清理步驟。