這是一個無狀態GitHub API 代理,允許建立和使用存取受限的GitHub API 令牌。
基本上,它是 GitHub API 令牌的身份和存取管理。
GitHub 的 API 令牌不允許對令牌可以執行的操作進行細粒度控制(請參閱此 Dear GitHub 問題)。例如,您基本上必須建立一個對儲存庫具有完全控制權的令牌,以允許令牌僅將標籤套用至問題。
這在規模上是有問題的。當您有許多作業、流程和/或機器人與 GitHub API 互動時,令牌被洩露的可能性就會增加,並且具有廣泛權限的令牌會產生非常嚴重的後果。
此代理程式可讓您建立具有細粒度權限的 API 令牌(魔術令牌),然後透過代理程式使用這些魔術令牌與 GitHub API 進行通訊。代理程式驗證魔術令牌是否允許執行請求的操作,然後使用真實的 GitHub API 令牌將請求轉送到 GitHub API。
該代理不需要後備存儲,並將其所有狀態存儲在魔術令牌本身中。
代理程式使用非對稱加密技術(公鑰和私鑰對)和 JWT 將其狀態編碼到魔術令牌中。
每個魔法令牌都是一個簡單的 JWT,由代理的私鑰簽名,並帶有以下聲明:
{
"iat": 1541616032,
"exp": 1699296032,
"github_token": "[long encrypted key]",
"scopes": [
"GET /user",
"GET /repos/theacodes/nox/issues"
]
}
github_token
宣告是原始 GitHub API 令牌的加密版本。它使用代理的公鑰進行加密,因此只有代理本身可以解密它(使用其私鑰)。
範圍聲明決定了魔法令牌可以存取的內容。該代理具有如下所述的基本作用域實現,但您可以實現您想要的任何作用域策略。
JWT 由代理本身使用其私鑰產生和簽署。這意味著在不使 JWT 失效的情況下無法篡改內容。
預設情況下,該代理程式具有使用以下格式的簡單範圍策略:
METHOD /url/pattern
其中METHOD
可以是GET
、 POST
、 PUT
等,而/url/pattern
可以是用來檢查 URL 的任何正規表示式。
例如,要建立一個可以存取someorg
中任何儲存庫問題的令牌,您可以執行以下操作:
GET /repos/someorg/.+?/issues
待辦事項
這不是 Google 官方產品、實驗產品或其他產品。這不是安全的靈丹妙藥。您承擔使用該項目時的所有風險。