{"meta":{"title":"为GitHub应用选择权限","intro":"GitHub应用的权限决定了应用可以使用“API”执行哪些操作GitHub，以及应用可以接收哪些 Webhook。","product":"应用","breadcrumbs":[{"href":"/zh/apps","title":"应用"},{"href":"/zh/apps/creating-github-apps","title":"创建GitHub应用"},{"href":"/zh/apps/creating-github-apps/registering-a-github-app","title":"注册 GitHub App"},{"href":"/zh/apps/creating-github-apps/registering-a-github-app/choosing-permissions-for-a-github-app","title":"权限"}],"documentType":"article"},"body":"# 为GitHub应用选择权限\n\nGitHub应用的权限决定了应用可以使用“API”执行哪些操作GitHub，以及应用可以接收哪些 Webhook。\n\n## 关于 GitHub App 权限\n\nGitHub Apps 默认情况下，没有任何权限。 注册时 GitHub App，可以选择应用的权限。 选择的权限确定应用可以使用“API”执行的操作 GitHub，以及应用可以订阅哪些 Webhook。 你应选择应用所需的最小权限。\n\n尽管 GitHub Apps 默认情况下没有任何权限，但在代表用户执行操作时，它们确实具有读取公共资源的隐式权限。 当用户授权应用代表其执行操作时， GitHub App 可以使用生成的用户访问令牌向 REST API 和 GraphQL API 发出请求来读取公共资源。 要详细了解如何代表用户执行操作，请参阅“[代表用户使用 GitHub 应用进行身份验证](/zh/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-with-a-github-app-on-behalf-of-a-user)”。\n\n应用权限被归类为存储库、组织、 企业 或帐户权限。\n\n* 存储库权限允许应用访问与安装应用的帐户拥有的存储库相关的资源。\n* 如果应用安装在组织帐户上，则组织权限允许应用访问与安装应用的组织相关的资源。\n* 如果应用安装在企业帐户上，企业权限允许应用管理企业。\n* 如果某用户还授权了你的应用，则帐户权限允许应用访问与该用户相关的资源。 有关应用的用户授权的详细信息，请参阅“[代表用户使用 GitHub 应用进行身份验证](/zh/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-with-a-github-app-on-behalf-of-a-user)”。\n\n任何用户、组织或企业都可以使用任何权限类型创建应用。 拥有企业权限的应用必须为 `public` 或 `internal` 才能安装在企业帐户上。\n`public`应用可由任何企业安装，而`internal`应用只能由拥有该应用的企业或拥有该应用的组织的企业安装。 没有额外的限制，可以安装应用的组织或个人帐户。\n\n跨企业安装应用有一个例外。 如果应用请求“企业组织安装”或“企业组织安装存储库”权限，则唯一可以安装它的企业是拥有该应用的企业。 不能在另一个企业上安装应用，并且不能将任一权限添加到已在企业上安装的应用，而不是拥有该应用的应用。\n\n当用户在其用户帐户或组织中安装应用时，他们会看到并授予应用请求的存储库和组织权限。 当他们在其企业上安装它时，他们只能看到并仅授予应用请求的企业权限。\n他们还会看到应用可以请求单个用户的帐户权限列表。 当用户授权应用代表他们执行操作时，他们将看到并授予应用请求的帐户权限。\n\n使用用户访问令牌的 API 请求是否成功取决于用户的权限以及应用的权限。 例如，如果向应用授予了写入存储库内容的权限，但用户只能读取内容，则用户访问令牌也只能读取内容。 使用安装访问令牌的 API 请求是否成功仅取决于应用权限。\n\n有关在注册期间 GitHub App 指定权限的详细信息，请参阅 [注册GitHub应用](/zh/apps/creating-github-apps/registering-a-github-app/registering-a-github-app)。\n\n某些 Webhook 和 API 访问需要“管理”权限。 如果你的应用需要“管理”权限，请考虑在应用的主页上说明这一要求。 这将帮助用户了解你的应用为何需要高级权限。\n\n## 关于权限更改\n\n你可以随时修改自己拥有或管理的应用的权限。系统会提示安装应用的每个帐户的所有者批准新权限。 如果帐户所有者未批准新权限，则其安装将继续使用旧权限。\n\n有关修改权限的详细信息，请参阅“[修改GitHub应用注册](/zh/apps/maintaining-github-apps/modifying-a-github-app-registration)”。\n\n## 为 Webhook 访问选择权限\n\nWebhook 文档指示每个 Webhook 是否可供 GitHub Apps使用。 对于要订阅的每个 Webhook，请参阅 Webhook 文档，了解订阅该 Webhook 所需的权限 GitHub App 。 有关详细信息，请参阅“[Webhook 事件和有效负载](/zh/webhooks/webhook-events-and-payloads)”。\n\n例如，如果希望应用订阅 `team` 事件，应用必须具有“成员”组织权限。\n\nGitHub App在注册页上，更改应用权限时，可用的 Webhook 事件将发生变化。 如果你没有为订阅事件选择足够的权限 GitHub App ，该事件将不会在应用注册页上显示为一个选项。\n\n## 为 REST API 访问选择权限\n\n每个终结点的 REST API 参考文档都说明终结点是否正常工作 GitHub Apps ，并说明应用使用终结点所需的权限。 某些终结点可能需要多个权限，而某些终结点可能需要多个权限之一。 有关 GitHub App 可以在每个权限下访问哪些 REST API 终结点的概述，请参阅 [GitHub应用所需的权限](/zh/rest/authentication/permissions-required-for-github-apps)。\n\n例如，要使用 `GET /orgs/{org}/dependabot/secrets` 终结点，应用必须至少具有“组织 dependabot 机密”权限的读取级别权限。\n\n如果应用在权限不足的情况下发出 REST API 请求，API 将返回 `403` 响应。\n\n为帮助正确选择权限，在 REST API 响应中将会收到 `X-Accepted-GitHub-Permissions` 标头。 标头将会提示访问端点所需的权限。 有关详细信息，请参阅“[REST API 故障排除](/zh/rest/using-the-rest-api/troubleshooting-the-rest-api#resource-not-accessible)”。\n\n## 为 GraphQL API 访问选择权限\n\n对于 GraphQL 请求，应测试应用，确保它具有执行所需的 GraphQL 查询和突变必需的权限。\n\n如果应用在权限不足的情况下进行 GraphQL API 查询或突变，API 将返回 `401` 响应。\n\n## 为 Git 访问选择权限\n\n如果希望应用使用安装或用户访问令牌对基于 HTTP 的 Git 访问进行身份验证，则应请求“内容”存储库权限。 如果应用专门需要访问或编辑 `.github/workflows` 目录中的 Actions 文件，请请求“工作流”存储库权限。\n\n然后可以使用访问令牌作为 HTTP 密码。 将 `TOKEN` 替换为访问令牌：\n\n```shell\ngit clone https://x-access-token:TOKEN@github.com/owner/repo.git\n```"}