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 appGitHub 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 令牌格式的私钥请求安装访问令牌。在通过 Web 请求进行重定向后,可以 OAuth app 交换访问令牌的请求令牌。
安装令牌将应用标识为GitHub应用机器人,例如 @jenkins-bot。访问令牌将应用程序识别为向其授予令牌的用户,例如 @octocat。
安装访问令牌在预定义的时间(当前为 1 小时)后过期。OAuth 令牌在被客户撤销之前一直保持活动状态。
GitHub Apps 在组织或存储库上安装的速率限制取决于随安装数量一起缩放的速率限制。 有关详细信息,请参阅“GitHub 应用的速率限制”。OAuth 令牌使用每小时 5,000 个请求的用户速率限制。
可以在 GitHub 应用级别(影响所有安装)和单个安装级别授予速率限制增加。按以下授予速率限制增加 OAuth app。 授予该 OAuth app 令牌的每个令牌都会获得增加的限制。
GitHub Apps 可以代表用户进行身份验证。 要授权的 OAuth app 流与授权流相同。 用户访问令牌可能过期,可以使用刷新令牌进行续订。 有关详细信息,请参阅 刷新用户访问令牌代表用户使用 GitHub 应用进行身份验证授权OAuth appsOAuth app代表用户使用的 OAuth 流。 这是用于生成用户访问令牌的 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 用户名。

机器与机器人帐户

机器用户账户是基于 OAuth 的个人账户,用于通过 GitHub 的用户系统隔离自动化系统。

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

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