使用 GitHub 应用而非 OAuth 应用
总体而言,GitHub 应用优先于 OAuth 应用。
OAuth 应用和 GitHub 应用都使用 OAuth 2.0。
OAuth 应用只能代表用户操作,而 GitHub 应用既可以代表用户操作,也可以独立于用户操作。
更多信息,请参阅 GitHub 应用与 OAuth 应用的区别。
有关如何将现有 OAuth 应用迁移到 GitHub 应用的说明,请参阅 将 OAuth 应用迁移到 GitHub 应用。
GitHub 应用提供增强的安全性
GitHub 应用对其可执行的操作拥有更细粒度的控制。与 OAuth 应用使用的宽泛作用域不同,GitHub 应用使用细粒度权限。例如,如果您的应用需要读取仓库内容,OAuth 应用必须请求 repo 作用域,这同时会授予其编辑仓库内容和设置的权限。GitHub 应用可以只请求只读访问仓库内容的权限,从而阻止其执行诸如编辑仓库内容或更改设置等更高权限的操作。
GitHub 应用还提供对仓库访问的更细致控制。使用 GitHub 应用时,安装该应用的用户或组织所有者可以决定该应用可以访问哪些仓库。相反,OAuth 应用可以访问授权该应用的用户能够访问的所有仓库。
GitHub 应用使用短期令牌。如果令牌泄露,其有效期较短,从而降低可能造成的损害。相对而言,OAuth 应用的令牌在授权人撤销之前永不失效。
这些安全特性通过限制在凭证泄露时可能造成的损害来提升 GitHub 应用的安全性。此外,这也使得拥有更严格安全策略的组织能够放心使用您的应用。
GitHub 应用可以独立于用户或代表用户操作
GitHub 应用可以独立于用户操作。这对于不需要用户输入的自动化任务非常有用。
与 OAuth 应用类似,GitHub 应用仍然可以代表用户执行操作。不同于 OAuth 应用(不会标明操作是由应用执行),GitHub 应用会标明该操作是由应用代表用户执行的。
GitHub 应用不绑定到用户账户,也不占用席位。即使最初安装该应用的人员离开组织,GitHub 应用仍保持已安装状态。这使得您的集成即使在团队成员离职后仍能继续工作。
GitHub 应用拥有可扩展的速率限制
使用安装访问令牌的 GitHub 应用的速率限制会随仓库数量和组织用户数量而扩展。相对而言,OAuth 应用的速率限制较低且不会随规模增长。更多信息,请参阅 GitHub 应用的速率限制。
GitHub 应用内置 Webhook
GitHub 应用具备内置的、集中式的 Webhook。它们可以接收所有可访问仓库和组织的事件。相对而言,OAuth 应用必须为每个仓库和组织单独配置 Webhook。
API 访问略有差异
总体而言,GitHub 应用和 OAuth 应用可以发起相同的 API 请求。但它们之间仍存在一些差异。
- 管理检查运行和检查套件的 REST API 仅对 GitHub 应用开放。
- 企业级资源(如企业对象本身)对 GitHub 应用不可用。这意味着 GitHub 应用无法调用类似
GET /enterprise/settings/license的端点。不过,企业拥有的组织和仓库资源是可用的。 - 某些请求可能会因所授予的权限和仓库访问范围而返回不完整的数据。例如,当您的应用请求获取用户可访问的所有仓库时,响应只会包含该应用也被授权访问的仓库。
有关 GitHub 应用可使用的 REST API 端点的更多信息,请参阅 GitHub 应用安装访问令牌可用的端点。
在 GitHub 应用或个人访问令牌之间进行选择
如果您希望代表用户或组织访问 GitHub 资源,或预期集成会长期存在,建议构建 GitHub 应用。
个人访问令牌可用于 API 测试或短期脚本。由于个人访问令牌绑定到用户,如果该用户不再拥有所需资源的访问权限,您的自动化可能会中断。而安装在组织上的 GitHub 应用不依赖于单个用户。此外,GitHub 应用不像用户那样占用 GitHub 席位。
GitHub 支持两类个人访问令牌,但建议您在可能的情况下使用细粒度个人访问令牌,而非(经典)个人访问令牌。有关个人访问令牌的更多信息,请参阅 管理个人访问令牌。
在 GitHub 应用或 GitHub Actions 之间进行选择
GitHub 应用和 GitHub Actions 都提供构建自动化和工作流工具的方法。
GitHub Actions 提供可执行持续集成、部署任务和项目管理等工作的自动化。它们在 GitHub 托管的运行器机器或由管理员设置的自托管运行器上运行。GitHub Actions 并非持久运行。工作流会在其所在仓库触发相应事件时执行,并且只能访问该仓库的资源。不过,自定义 Action 可以在多个仓库和组织之间共享,开发者能够复用并修改现有 Action 以满足需求。GitHub Actions 还内置了机密管理功能,帮助您安全地与第三方服务交互并安全管理部署密钥。
GitHub 应用 持久运行在您提供的服务器或计算基础设施上,或运行在用户设备上。它们既可以响应 GitHub Webhook 事件,也可以响应 GitHub 生态系统之外的事件。对于跨多个仓库或组织的操作,或向其他组织和企业提供托管服务,这是一种理想选择。当构建的工具主要在 GitHub 之外运行,或需要比 GitHub Actions 工作流更长的执行时间或更高的权限时,GitHub 应用是最佳方案。
更多关于比较 GitHub Actions 与 GitHub 应用的信息,请参阅 GitHub Actions vs GitHub 应用。
如果内置的 GITHUB_TOKEN 权限不足,您可以在 GitHub Actions 工作流中使用 GitHub 应用进行身份验证。更多信息,请参阅 在 GitHub Actions 工作流中使用 GitHub 应用进行已认证的 API 请求。