# 关于创建GitHub应用

使用 GitHub Apps 可以构建集成来自动执行流程并扩展 GitHub 的功能。

## 关于 GitHub Apps

GitHub App 是一种集成类型，你可以构建它来与 GitHub
交互并扩展其功能。 可以构建 GitHub App 来提供灵活性并减少流程中的冲突，而无需登录用户或创建服务帐户。

GitHub Apps 的常见用例包括：

* 自动化任务或后台进程
* 支持“使用 GitHub
  登录”，从而让用户能够使用其 GitHub 帐户登录，以便在生态系统中提供其标识
* 作为开发人员工具，允许用户通过登录你的 GitHub 来使用 GitHub App，然后代表他们执行操作
* 将工具或外部服务与 GitHub
  集成

与 OAuth apps 一样，GitHub Apps 使用 OAuth 2.0，可以代表用户执行操作。 与 OAuth apps 不同的是，GitHub Apps 也可以独立于用户进行操作。

GitHub Apps 可以直接安装在组织和个人帐户上，并获得对特定仓库的访问权限。 它们拥有内置 web 挂钩和狭窄的特定权限。

默认情况下，只有组织所有者才可管理组织中 GitHub 的设置。 若要允许其他用户更改组织拥有的 GitHub 应用的开发人员设置，所有者可以向他们授予 GitHub 应用管理器权限。 GitHub 应用管理器无法管理第三方应用程序。 有关在组织中添加和删除 GitHub 应用管理器的详细信息，请参阅“[组织中的角色](/zh/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#github-app-managers)”。

## 生成 GitHub App

若要生成 GitHub App，首先需要注册 GitHub App。 有关详细信息，请参阅“[注册GitHub应用](/zh/apps/creating-github-apps/registering-a-github-app/registering-a-github-app)”。

然后，需要编写代码以向 GitHub App 添加功能。 可以使用 GitHub App 注册中的凭据向 GitHub
的 API 发出经过身份验证的请求。 若要详细了解如何为 GitHub App 编写代码，请参阅“[关于为GitHub应用编写代码](/zh/apps/creating-github-apps/writing-code-for-a-github-app/about-writing-code-for-a-github-app)”。 若要详细了解如何发出经过身份验证的请求，请参阅“[关于使用 GitHub 应用进行身份验证](/zh/apps/creating-github-apps/authenticating-with-a-github-app/about-authentication-with-a-github-app)”。

为 GitHub App 编写代码后，需要在某个位置运行应用。 如果你的应用是网站或 Web 应用，则可以在[Azure App Service](https://azure.microsoft.com/products/app-service/)等服务器上托管应用。 如果你的应用是客户端应用，它可能会在用户的设备上运行。

要使用 GitHub App，需要将其安装在 组织或个人帐户上。

* 如果将 GitHub App 设为**私有**，则只能在拥有该应用的帐户上进行安装。
* 如果 GitHub App 属于公有，则其他帐户也可以安装此应用\*\*\*\*。 只有该企业的成员才能登录此应用。

有关详细信息，请参阅 [安装自己的GitHub应用](/zh/apps/using-github-apps/installing-your-own-github-app) 和 [共享 GitHub 应用](/zh/apps/sharing-github-apps/sharing-your-github-app)。

## 了解要构建的 GitHub App 类型

设计 GitHub App 有多种方法可供你选择，具体取决你希望应用包含的功能。

### 代表用户执行操作的 GitHub Apps

如果希望应用代表用户执行操作，则应使用用户访问令牌进行身份验证。 这种类型的请求有时称为“用户到服务器”，这意味着应用将受到已授予应用的权限以及用户权限的限制。 使用此模式时，用户必须先授权应用，然后应用才能执行操作。 有关详细信息，请参阅“[代表用户使用 GitHub 应用进行身份验证](/zh/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-with-a-github-app-on-behalf-of-a-user)”。

可以使用 GitHub App 创建的一些自动化示例包括，其中应用代表用户执行操作：

* 使用 GitHub App 作为生态系统标识提供者的 GitHub。
* 一个 GitHub App 在 GitHub 上添加服务，这个服务可能对 GitHub 用户有用。 可以通过 GitHub Marketplace 与其他开发人员共享应用，或者将应用设为公开。

### 以应用自身身份执行操作的 GitHub Apps

如果希望应用以应用自身身份而不是用户身份执行操作，则应使用安装访问令牌进行身份验证。 这种类型的请求有时称为“服务器到服务器”，这意味着应用将受到已授予应用的权限的限制。 有关详细信息，请参阅“[验证为 GitHub 应用程序安装](/zh/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-as-a-github-app-installation)”。

可以使用 GitHub App 创建的一些自动化示例包括，其中应用以自身身份执行操作：

* 使用 Webhook 响应给定一组特定条件的事件的 GitHub App。 例如，可以围绕 REST API 终结点创建自动化来[审批 fine-grained personal access token 的请求](/zh/rest/orgs/personal-access-tokens?apiVersion=2022-11-28#review-requests-to-access-organization-resources-with-fine-grained-personal-access-tokens)，在给定特定策略的情况下批准请求。
* 帮助存储库参与者的 GitHub App。 例如，应用可以在参与者创建拉取请求或发表评论后发布有用的资源。
* 生成生存期较短的令牌以提供给其他 CI/CD 工具或从存储库中提取信息的 GitHub App。

### 响应 Webhook 的 GitHub Apps

如果希望应用响应 GitHub 上的事件，则应用应订阅 Webhook。 例如，你可能希望你的应用在 pull request 打开时发表评论。 有关详细信息，请参阅“[将 Webhook 与 GitHub 应用配合使用](/zh/apps/creating-github-apps/setting-up-a-github-app/using-webhooks-with-github-apps)”。

### GitHub Apps 可以执行某些操作

设置 GitHub App时，可以选择该应用的特定权限。 这些权限确定应用可以通过 GitHub API 执行哪些操作、应用可以代表登录用户执行哪些操作，以及应用可以接收哪些 Webhook。 有关详细信息，请参阅“[为GitHub应用选择权限](/zh/apps/creating-github-apps/registering-a-github-app/choosing-permissions-for-a-github-app)”。