Skip to main content

GitHub 应用和 OAuth 应用之间的差异

一般而言,GitHub Apps 比 OAuth apps 更受青睐,因为它们使用细粒度权限,能够更好地控制应用可访问哪些仓库,并使用短生命周期令牌。

关于 GitHub Apps 和 OAuth apps

一般情况下, GitHub Apps 首选于 OAuth apps. GitHub Apps 使用精细的权限,让用户更好地控制应用可以访问的存储库,并使用生存期较短的令牌。 这些属性可以限制在应用的凭据泄露时可能造成的损害,从而强化应用的安全性。

类似于 OAuth apps, GitHub Apps 仍可以使用 OAuth 2.0 并生成一种类型的 OAuth 令牌(称为用户访问令牌),并代表用户执行操作。 但是, GitHub Apps 也可以独立于用户执行操作。 这有利于不需要用户输入的自动化。 即使在组织上安装应用的人离开组织,该应用仍将继续工作。

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

GitHub Apps 使用安装访问令牌时的速率限制会随仓库数量和组织用户数量的增加而提高。 相反, OAuth apps 具有较低的速率限制,并且不缩放。

有一种情况,OAuth app 比 GitHub App 更可取。 如果你的应用需要访问企业级资源,例如企业对象本身,则应使用一个 OAuth app,因为 GitHub App 目前还不能被授予针对企业的权限。 GitHub Apps 仍可访问公司拥有的组织和存储库资源。

有关 GitHub Apps 的详细信息,请参阅 关于创建GitHub应用

有关将现有项 OAuth app 迁移到 a GitHub App的详细信息,请参阅 将 OAuth 应用迁移到 GitHub 应用

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

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

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

相比之下,用户授权 OAuth apps,这使应用能够充当经过身份验证的用户。 例如,可以授权 OAuth app 查找经过身份验证的用户的所有通知。 您随时可以撤销某个 OAuth app 的权限。

组织所有者可以选择是否允许外部协作者请求未经批准的OAuth apps访问权限。GitHub Apps 有关详细信息,请参阅“限制 OAuth 应用和GitHub应用访问请求和安装”。

警告

从 OAuth app 撤销所有权限将会删除应用程序代表用户生成的所有 SSH 密钥,包括部署密钥

GitHub应用OAuth apps
你必须是组织所有者,或在存储库中拥有管理员权限才能在组织中安装GitHub应用。 如果在存储库中安装了GitHub应用,并且需要组织权限,则组织所有者必须批准该应用程序。您可以授权 OAuth app 访问资源。
可以在个人存储库上安装GitHub应用。您可以授权 OAuth app 访问资源。
你必须是组织所有者、个人存储库所有者,或在存储库中拥有管理员权限才能卸载GitHub应用并删除其访问权限。您可以删除 OAuth 访问令牌以删除访问权限。
你必须是组织所有者或在存储库中拥有管理员权限才能请求GitHub应用安装。如果组织应用策略已启用,则任何组织成员都可以请求在组织中安装一个 OAuth app。 组织所有者必须批准或拒绝请求。

GitHub 应用和 OAuth apps 访问哪些内容?

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

_授权_OAuth app者有权访问所有用户或组织所有者的可访问资源。

GitHub应用OAuth apps
安装GitHub应用授予应用对用户或组织帐户所选存储库的访问权限。
OAuth app授权应用访问用户可访问的资源。 例如,它们可以访问的存储库。
如果管理员从安装中删除存储库,则来自GitHub应用的安装令牌将失去对资源的访问权限。当用户失去对资源的访问权限时,例如失去对仓库的写入权限,OAuth 访问令牌也会失去相应的访问权限。
安装访问令牌仅限于具有应用创建者所选权限的指定存储库。OAuth 访问令牌通过作用域进行限制。
GitHub应用可以请求单独访问问题和拉取请求,而无需访问存储库的实际内容。
OAuth apps 需要请求 repo 范围以获取对问题、拉取请求或存储库拥有的任何内容的访问权限。
GitHub应用不受组织应用程序策略的约束。 GitHub应用仅有权访问组织所有者授予的存储库。如果组织应用程序策略处于活动状态,则只有组织所有者才能授权安装 。OAuth app 如果已安装,则 OAuth app 获取对组织所有者在已批准组织内拥有的令牌可见的任何内容的访问权限。
GitHub 应用会在安装被更改或删除时接收到 Webhook 事件。 应用程序创建者可以知道其对组织资源的访问权限何时扩大或缩小。
OAuth apps 可以随时根据授予用户的更改访问权限失去对组织或存储库的访问权限。 当 OAuth app 失去对某项资源的访问权限时,它不会通知你。

基于令牌的识别

注意

GitHub应用还可以使用基于用户的令牌。 有关详细信息,请参阅“代表用户使用 GitHub 应用进行身份验证”。

GitHub应用OAuth apps
GitHub 应用可以使用带外 JSON Web 令牌格式的私钥请求安装访问令牌。
OAuth app 需要用户进行交互式身份验证才能获取用户访问令牌。
安装令牌将应用标识为 GitHub App 机器人帐户,例如 @jenkins[bot]。用户访问令牌将应用标识为登录到应用的用户,例如 @octocat。
安装访问令牌在预定义的时间(当前为 1 小时)后过期。
在客户吊销 OAuth 令牌之前,OAuth 令牌将保持活动状态。
安装在组织或仓库上的 GitHub Apps 受速率限制约束,而该限制会随账户中的用户数和仓库数增加而提高。 有关详细信息,请参阅“GitHub 应用的速率限制”。OAuth 令牌使用每小时 5,000 个请求的用户速率限制。
可以在 GitHub 应用级别(影响所有安装)和单个安装级别授予速率限制增加。速率限制提升按每个 OAuth app 授予。 授予该 OAuth app 令牌的每个令牌都会获得增加的限制。
GitHub Apps 可以代表用户进行身份验证。 用于授权的流程与 OAuth app 授权流程相同。 用户访问令牌可能过期,可以使用刷新令牌进行续订。 有关详细信息,请参阅 刷新用户访问令牌代表用户使用 GitHub 应用进行身份验证由OAuth apps使用的 OAuth 流程会授权OAuth app代表用户进行操作。 这与生成 GitHub App 用户访问令牌所使用的流程相同。

请求资源的权限级别

与OAuth appsGitHub应用具有目标权限不同,这些权限允许他们仅请求对所需内容的访问权限。 例如,持续集成(CI)GitHub应用可以请求对存储库内容的读取访问权限,以及对状态 API 的写入访问权限。 另一个GitHub应用无法读取或写入代码访问权限,但仍能够管理问题、标签和里程碑。 OAuth apps 无法使用精细权限。

访问GitHub应用(readwrite 权限)OAuth apps
访问公共存储库需要在安装过程中选择公共仓库。
public_repo 范围。
访问存储库代码/内容仓库内容
repo 范围。
获取问题、标签和里程碑问题
repo 范围。
获取拉取请求、标签和里程碑拉取请求
repo 范围。
用于访问提交状态(用于 CI 生成)提交状态
repo:status 范围。
访问部署和部署状态部署
repo_deployment 范围。
通过 Webhook 接收事件默认情况下,GitHub应用包括 Webhook。
write:repo_hookwrite:org_hook 范围。

代码库检索

GitHub应用OAuth apps
GitHub应用可以查看 /installation/repositories,查看安装可以访问的存储库。
OAuth apps可以查看/user/repos中的可访问仓库用户视图,或查看/orgs/:org/repos中的可访问仓库组织视图。
当从安装中添加或删除仓库时,GitHub 应用程序会接收 web 挂钩。
OAuth apps 创建组织 Webhook,用于在组织内创建新仓库时发送通知。

Webhook

GitHub应用OAuth apps
默认情况下,GitHub 应用程序有一个 web 挂钩,可根据配置接收它们有权访问的每个仓库中的事件。
OAuth apps 申请 webhook 作用域权限,以便为每个需要从中接收事件的仓库创建仓库 webhook。
GitHub应用使用组织成员的权限接收某些组织级事件。
OAuth apps 申请组织 webhook 权限范围,以便为其需要接收组织级事件的每个组织创建组织 webhook。
卸载GitHub应用时,会自动禁用 Webhook。如果某个 OAuth app 的访问令牌被删除,Webhook 不会自动被禁用,而且也无法自动清理它们。 必须要求用户手动执行此操作。

Git 访问

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

机器与机器人帐户

机器用户账户是个人账户,用于将使用 GitHub 用户系统的自动化系统隔离开来,并通过 PAT 或 GitHub 令牌与 OAuth app 交互。

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

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