让我们假设我们有一个有2个成员的GitHub组织,其中一个是管理员,另一个是机器用户。将计算机用户添加为组织中创建的每个新存储库的协作者。为了允许机器用户推送到存储库,我们可以使用仅具有该范围的访问令牌。现在我们遇到了一个问题,实际上机器用户可能会将任何内容推送到任何存储库,因为访问令牌授予了帐户范围的访问权限。至少有3种可能的方法可用于解决此问题:
- 为每个存储库创建一个新的部署密钥,并使用它来限制只有谁拥有密钥的写访问权限;
- 使用预接收挂钩拒绝不符合某些检查的提交;
- 为每个新存储库创建一个计算机用户,并将其作为具有仅推送访问令牌的协作者添加到该精确存储库中。
这些解决方案都有缺点:
- 部署密钥创建比访问令牌更不方便,因为我需要自己创建它们而不是向GitHub发出请求。此外,我不知道如何在JavaScript中使用它们以便能够在没有终端的情况下推送到GitHub并且无需在本地计算机上安装Git。有许多关于在终端上使用部署密钥的教程(example 1,example 2),还有关于利用密码和访问令牌来验证JavaScript库以上传到GitHub的教程,但如果你希望能够没有终端推送,只允许访问单个特定的存储库?
- 预接收挂钩是仅限企业的功能;
- 创建一堆机器用户并不是很有效。
还有其他方法可以解决这个问题吗?除了预接收挂钩之外还有其他方法可以拒绝提交吗?你能帮我弄清楚如何使用JavaScript通过使用部署密钥(what about this)将提交推送到GitHub吗?有没有办法发现使用webhook推送哪个访问令牌?