跳至主要内容

决定何时构建 GitHub 应用

在构建集成时,你应考虑在以下情况下使用 GitHub 应用,而不是 OAuth 应用、个人访问令牌或 GitHub 操作。

使用 GitHub 应用而不是 OAuth 应用

通常,GitHub 应用比 OAuth 应用更受青睐。

OAuth 应用和 GitHub 应用都使用 OAuth 2.0。

OAuth 应用只能代表用户执行操作,而 GitHub 应用既可以代表用户执行操作,也可以独立于用户执行操作。

有关详细信息,请参阅“GitHub 应用和 OAuth 应用之间的差异”。

有关如何将现有 OAuth 应用迁移到 GitHub 应用的信息,请参阅“将 OAuth 应用迁移到 GitHub 应用”。

GitHub 应用提供增强的安全性

GitHub 应用提供了对应用可以执行的操作的更多控制。GitHub 应用使用细粒度的权限,而不是 OAuth 应用使用的广泛范围。例如,如果你的应用需要读取存储库的内容,则 OAuth 应用将需要 repo 范围,该范围还允许应用编辑存储库内容和设置。GitHub 应用可以请求对存储库内容的只读访问权限,这将不允许应用执行更高级别的操作,例如编辑存储库内容或设置。

GitHub 应用还提供了对存储库访问的更多控制。使用 GitHub 应用,安装该应用的用户或组织所有者可以决定该应用可以访问哪些存储库。相反,OAuth 应用可以访问授权该应用的用户可以访问的每个存储库。

GitHub 应用使用短期令牌。如果令牌泄露,该令牌将在较短的时间内有效,从而减少可能造成的损害。相反,OAuth 应用令牌在授权 OAuth 应用的人撤销令牌之前不会过期。

这些安全功能通过限制在你的应用的凭据泄露时可能造成的损害来帮助强化你的 GitHub 应用的安全性。此外,这允许具有更严格安全策略的组织使用你的应用。

GitHub 应用可以独立于用户或代表用户

GitHub 应用可以独立于用户。这对于不需要用户输入的自动化非常有益。

与 OAuth 应用类似,GitHub 应用仍然可以代表用户执行操作。与不表明操作是由应用执行的 OAuth 应用不同,GitHub 应用表明操作是由该应用代表用户执行的。

GitHub 应用不与用户帐户绑定,并且不消耗 GitHub 上的席位。即使最初安装该应用的人离开组织,GitHub 应用仍然保持安装状态。即使人们离开你的团队,这也能让你的集成继续工作。

GitHub 应用具有可扩展的速率限制

使用安装访问令牌的 GitHub 应用的速率限制会随着存储库数量和组织用户数量而扩展。相反,OAuth 应用具有较低的速率限制并且不会扩展。有关更多信息,请参阅“GitHub 应用的速率限制”。

GitHub 应用内置了 Webhook

GitHub 应用具有内置的集中式 Webhook。GitHub 应用可以接收该应用可以访问的所有存储库和组织的 Webhook 事件。相反,OAuth 应用必须为每个存储库和组织单独配置 Webhook。

API 访问略有不同

通常,GitHub 应用和 OAuth 应用可以发出相同的 API 请求。但是,有一些区别

  • 管理检查运行和检查套件的 REST API 仅对 GitHub 应用可用。
  • 企业级资源(如企业对象本身)对 GitHub 应用不可用。这意味着 GitHub 应用无法调用诸如 GET /enterprise/settings/license 的端点。但是,企业拥有的组织和存储库资源可用。
  • 某些请求可能会返回不完整的数据,具体取决于授予 GitHub 应用的权限和存储库访问权限。例如,如果您的应用发出请求以获取用户可以访问的所有存储库,则响应将仅包含应用也已获得访问权限的存储库。

有关 GitHub 应用可用的 REST API 端点的详细信息,请参阅“适用于 GitHub 应用安装访问令牌的端点”。

在 GitHub 应用或个人访问令牌之间进行选择

如果您想代表用户或组织访问 GitHub 资源,或者您预计集成将长期存在,我们建议构建一个 GitHub 应用。

您可以将个人访问令牌用于 API 测试或短期脚本。由于个人访问令牌与用户相关联,因此如果用户不再有权访问您需要的资源,您的自动化可能会中断。安装在组织中的 GitHub 应用不依赖于用户。此外,与用户不同,GitHub 应用不会消耗 GitHub 席位。

GitHub 支持两种类型的个人访问令牌,但建议您尽可能使用细粒度的个人访问令牌,而不是个人访问令牌(经典版)。有关个人访问令牌的详细信息,请参阅“管理您的个人访问令牌”。

在 GitHub 应用或 GitHub Actions 之间进行选择

GitHub 应用和 GitHub Actions 都提供了构建自动化和工作流工具的方法。

GitHub Actions 提供自动化,可以在存储库中执行持续集成、部署任务和项目管理等作业。它们直接在 GitHub 托管的运行器计算机或管理员设置的自托管运行器上运行。GitHub Actions 不会持续运行。GitHub Actions 工作流响应其存储库中发生的事件运行,并且只能访问为其设置的存储库的资源。但是,自定义操作可以在存储库和组织之间共享,从而允许开发人员重新使用和修改现有操作以满足他们的需求。GitHub Actions 还附带内置的秘密管理,您可以使用它安全地与第三方服务交互并安全地管理部署密钥。

GitHub 应用 在您提供的服务器或计算基础设施上或在用户设备上持续运行。它们可以响应 GitHub webhook 事件以及 GitHub 生态系统外部的事件。对于跨越多个存储库或组织的操作,或者为其他组织提供托管服务,它们是一个不错的选择。当构建一个主要在 GitHub 之外执行功能或需要比 GitHub Actions 工作流分配的更多执行时间或权限的工具时,GitHub 应用是最佳选择。

有关将 GitHub Actions 与 GitHub 应用进行比较的更多信息,请参阅“关于自定义操作”。

如果内置的 GITHUB_TOKEN 没有足够的权限,则可以在 GitHub Actions 工作流中使用 GitHub 应用进行身份验证。有关更多信息,请参阅“在 GitHub Actions 工作流中使用 GitHub 应用进行经过身份验证的 API 请求”。