跳至主要内容

GitHub Apps 和 OAuth 应用程序之间的区别

一般来说,GitHub Apps 比 OAuth 应用程序更受欢迎,因为它们使用细粒度权限,让用户可以更好地控制应用程序可以访问哪些仓库,并且使用短期令牌。

关于 GitHub Apps 和 OAuth 应用程序

一般来说,GitHub Apps 比 OAuth 应用程序更受欢迎。GitHub Apps 使用细粒度权限,让用户可以更好地控制应用程序可以访问哪些仓库,并且使用短期令牌。这些特性可以通过限制应用程序凭据泄露后可能造成的损害来增强应用程序的安全性。

与 OAuth 应用程序类似,GitHub Apps 仍然可以使用 OAuth 2.0 并生成一种 OAuth 令牌(称为用户访问令牌),并代表用户执行操作。但是,GitHub Apps 也可以独立于用户执行操作。这对不需要用户输入的自动化操作非常有用。即使安装应用程序的人员离开了组织,应用程序也能继续工作。

GitHub Apps 具有内置的集中式 Webhook。GitHub Apps 可以接收应用程序可以访问的所有仓库和组织的 Webhook 事件。相反,OAuth 应用程序必须为每个仓库和组织分别配置 Webhook。

使用安装访问令牌的 GitHub Apps 的速率限制会随着仓库数量和组织用户数量的增加而增加。相反,OAuth 应用程序的速率限制较低,并且不会随着数量的增加而增加。

在某些情况下,OAuth 应用比 GitHub 应用更受欢迎。如果您的应用需要访问企业级资源,例如企业对象本身,则应使用 OAuth 应用,因为 GitHub 应用目前无法获得针对企业的权限。GitHub 应用仍然可以访问企业拥有的组织和仓库资源。

有关 GitHub 应用的更多信息,请参阅 "关于创建 GitHub 应用"。

有关将现有 OAuth 应用迁移到 GitHub 应用的更多信息,请参阅 "将 OAuth 应用迁移到 GitHub 应用"。

谁可以安装 GitHub 应用并授权 OAuth 应用?

您可以在个人帐户或您拥有的组织中安装 GitHub 应用。如果您在仓库中拥有管理员权限,则可以将 GitHub 应用安装在组织帐户中。如果在仓库中安装了 GitHub 应用并且需要组织权限,则组织所有者必须批准该应用程序。

默认情况下,只有组织所有者可以管理组织中 GitHub 应用的设置。要允许其他用户更改组织拥有的 GitHub 应用的开发者设置,所有者可以授予他们 GitHub 应用管理员权限。GitHub 应用管理员无法管理第三方应用程序。有关在组织中添加和删除 GitHub 应用管理员的更多信息,请参阅 "组织中的角色"。

相比之下,用户授权 OAuth 应用,这使应用能够以经过身份验证的用户身份行事。例如,您可以授权一个 OAuth 应用,该应用可以查找经过身份验证用户的全部通知。您始终可以撤销对 OAuth 应用的权限。

组织所有者可以选择是否允许外部协作者请求未经批准的 OAuth 应用和 GitHub 应用的访问权限。有关更多信息,请参阅 "限制 OAuth 应用和 GitHub 应用访问请求"。

警告:撤销 OAuth 应用的所有权限会删除该应用代表用户生成的任何 SSH 密钥,包括 部署密钥

GitHub 应用OAuth 应用
您必须是组织所有者或在仓库中拥有管理员权限才能在组织中安装 GitHub 应用。如果在仓库中安装了 GitHub 应用并且需要组织权限,则组织所有者必须批准该应用。您可以授权 OAuth 应用访问资源。
您可以在个人仓库中安装 GitHub 应用。您可以授权 OAuth 应用访问资源。
您必须是组织所有者、个人仓库所有者或在仓库中拥有管理员权限才能卸载 GitHub 应用并删除其访问权限。您可以删除 OAuth 访问令牌以移除访问权限。
您必须是组织所有者或在仓库中拥有管理员权限才能请求安装 GitHub 应用。如果组织应用策略处于活动状态,则任何组织成员都可以请求在组织中安装 OAuth 应用。组织所有者必须批准或拒绝该请求。

GitHub 应用和 OAuth 应用可以访问什么?

帐户所有者可以在一个帐户中使用 GitHub 应用,而无需授予另一个帐户访问权限。例如,您可以在雇主的组织中安装第三方构建服务,但决定不授予该构建服务访问您个人帐户中的仓库的权限。如果设置 GitHub 应用的人员离开组织,该应用将保持安装状态。

授权的 OAuth 应用可以访问用户或组织所有者可以访问的所有资源。

GitHub 应用OAuth 应用
安装 GitHub 应用会授予该应用访问用户或组织帐户所选仓库的权限。授权 OAuth 应用会授予该应用访问用户可以访问的资源的权限。例如,他们可以访问的仓库。
如果管理员从安装中删除仓库,则来自 GitHub 应用的安装令牌将失去对资源的访问权限。当用户失去访问权限时,例如当他们失去对仓库的写入权限时,OAuth 访问令牌将失去对资源的访问权限。
安装访问令牌仅限于由应用创建者选择的特定仓库,并具有其选择的权限。OAuth 访问令牌通过范围进行限制。
GitHub 应用可以请求对问题和拉取请求的单独访问权限,而无需访问仓库的实际内容。OAuth 应用程序需要请求 repo 范围才能访问问题、拉取请求或存储库拥有的任何内容。
GitHub 应用程序不受组织应用程序策略的约束。GitHub 应用程序只能访问组织所有者授予的存储库。如果组织应用程序策略处于活动状态,只有组织所有者才能授权安装 OAuth 应用程序。如果已安装,OAuth 应用程序将获得对组织所有者在批准的组织内可见的令牌可见的任何内容的访问权限。
当安装发生更改或删除时,GitHub 应用程序会收到一个 Webhook 事件。这会告诉应用程序创建者何时获得对组织资源的更多或更少访问权限。OAuth 应用程序可以随时根据授予用户的访问权限更改而失去对组织或存储库的访问权限。OAuth 应用程序不会在失去对资源的访问权限时通知您。

基于令牌的身份验证

注意:GitHub 应用程序也可以使用基于用户的令牌。有关更多信息,请参阅“代表用户使用 GitHub 应用程序进行身份验证”。

GitHub 应用OAuth 应用
GitHub 应用程序可以使用带 JSON Web 令牌格式的私钥在带外请求安装访问令牌。OAuth 应用程序可以通过 Web 请求在重定向后将请求令牌交换为访问令牌。
安装令牌将应用程序标识为 GitHub 应用程序机器人,例如 @jenkins-bot。访问令牌将应用程序标识为授予应用程序令牌的用户,例如 @octocat。
安装访问令牌在预定义的时间段后过期(目前为 1 小时)。OAuth 令牌保持活动状态,直到被客户撤销。
安装在组织或存储库上的 GitHub 应用程序受速率限制的约束,速率限制会随着安装数量的增加而增加。有关更多信息,请参阅“GitHub 应用程序的速率限制”。OAuth 令牌使用用户的每小时 5,000 个请求的速率限制。
速率限制增加可以在 GitHub 应用程序级别(影响所有安装)和单个安装级别授予。速率限制增加按 OAuth 应用程序授予。授予该 OAuth 应用程序的每个令牌都将获得增加的限制。
GitHub 应用程序可以代表用户进行身份验证。授权流程与 OAuth 应用程序授权流程相同。用户访问令牌可能会过期,并可以使用刷新令牌进行续订。有关更多信息,请参阅“刷新用户访问令牌”和“代表用户使用 GitHub 应用程序进行身份验证”。OAuth 应用使用的 OAuth 流程代表用户授权 OAuth 应用。这与生成 GitHub 应用用户访问令牌所使用的流程相同。

请求资源的权限级别

与 OAuth 应用不同,GitHub 应用具有目标权限,允许它们仅请求对所需资源的访问权限。例如,一个持续集成 (CI) GitHub 应用可以请求对仓库内容的读取访问权限和对状态 API 的写入访问权限。另一个 GitHub 应用可能没有对代码的读取或写入访问权限,但仍然可以管理问题、标签和里程碑。OAuth 应用无法使用细粒度权限。

访问GitHub 应用(readwrite 权限)OAuth 应用
对于访问公共仓库安装过程中需要选择公共仓库。public_repo 范围。
对于访问仓库代码/内容仓库内容repo 范围。
对于访问问题、标签和里程碑问题repo 范围。
对于访问拉取请求、标签和里程碑拉取请求repo 范围。
对于访问提交状态(用于 CI 构建)提交状态repo:status 范围。
对于访问部署和部署状态部署repo_deployment 范围。
通过 Webhook 接收事件GitHub 应用默认包含一个 Webhook。write:repo_hookwrite:org_hook 范围。

仓库发现

GitHub 应用OAuth 应用
GitHub 应用可以查看 /installation/repositories 以查看安装可以访问的仓库。OAuth 应用可以查看 /user/repos 获取用户视图,或查看 /orgs/:org/repos 获取组织视图以查看可访问的仓库。
当仓库被添加到安装或从安装中删除时,GitHub 应用会收到 Webhook。OAuth 应用创建组织 Webhook,以便在组织内创建新仓库时收到通知。

Webhook

GitHub 应用OAuth 应用
默认情况下,GitHub 应用有一个单一的 Webhook,它接收为每个它们有访问权限的仓库配置的事件。OAuth 应用请求 Webhook 范围,以便为每个需要接收事件的仓库创建仓库 Webhook。
GitHub 应用在获得组织成员的许可后,会接收某些组织级别的事件。OAuth 应用请求组织 Webhook 范围,以便为每个需要接收组织级别事件的组织创建组织 Webhook。
卸载 GitHub 应用时,Webhook 会自动禁用。如果删除了 OAuth 应用的访问令牌,Webhook 不会自动禁用,并且没有办法自动清理它们。您将不得不要求用户手动执行此操作。

Git 访问

GitHub 应用OAuth 应用
GitHub 应用请求仓库内容权限,并使用您的安装访问令牌通过基于 HTTP 的 Git 进行身份验证。有关更多信息,请参阅“为 GitHub 应用生成安装访问令牌”。OAuth 应用请求 write:public_key 范围并通过 API 创建部署密钥。然后,您可以使用该密钥执行 Git 命令。
该令牌用作 HTTP 密码。该令牌用作 HTTP 用户名。

机器帐户与机器人帐户

机器用户帐户是基于 OAuth 的个人帐户,它们使用 GitHub 的用户系统隔离自动化系统。

机器人帐户特定于 GitHub 应用,并且内置于每个 GitHub 应用中。

GitHub 应用OAuth 应用
GitHub 应用机器人不占用 GitHub Enterprise 许可证。机器用户帐户占用 GitHub Enterprise 许可证。
由于 GitHub 应用机器人从未被授予密码,因此客户无法直接登录。机器用户帐户被授予用户名和密码,由客户进行管理和保护。