这是一个无状态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 官方产品、实验产品或其他产品。这不是安全的灵丹妙药。您承担使用该项目时的所有风险。