Skip to main content

此版本的 GitHub Enterprise Server 将于以下日期停止服务 2026-08-25. 已停止发布的版本不受支持。 即使针对重大安全问题,也不会发布补丁。 若要获得更好的性能、改进的安全性和 GitHub Enterprise Server 中的新功能,请参阅升级过程的 Overview。 如需升级帮助,请联系 GitHub Enterprise 支持。

在GitHub Actions工作流中使用GitHub应用发出经过身份验证的 API 请求

您可以使用来自 GitHub App 的安装访问令牌,在 GitHub Actions 工作流中发起经身份验证的 API 请求。 还可以将令牌传递给自定义操作,使该操作能够发出经过身份验证的 API 请求。

关于 GitHub Actions 身份验证

如果需要在工作流中 GitHub Actions 发出经过身份验证的 API 请求,或者需要执行需要令牌的自定义操作,则应尽可能使用内置 GITHUB_TOKEN 。 但是,GITHUB_TOKEN 只能访问工作流存储库中的资源。 如果需要访问其他资源(例如组织中的资源或其他存储库中的资源),可以使用 a GitHub App. 有关您为何可能会使用GitHub App而非personal access token的详细信息,请参阅关于创建GitHub应用

使用GitHub App进行身份验证

若要使用 GitHub App 发起经身份验证的 API 请求,必须注册 GitHub App、存储应用的凭据并安装应用。 完成此操作后,可以使用应用创建安装访问令牌,该令牌可用于在工作流中发出经过身份验证的 GitHub Actions API 请求。 还可以将安装访问令牌传递给需要令牌的自定义操作。

  1. 注册一个 GitHub App。 为您的 GitHub App 注册项授予访问所需资源所需的权限。 有关详细信息,请参阅 注册GitHub应用为GitHub应用选择权限

  2. 将客户端 GitHub App ID 存储为 GitHub Actions 配置变量。 可以在应用的设置页上找到客户端 ID。 客户端 ID 不同于应用 ID。 有关导航到设置 GitHub App页的详细信息,请参阅 修改GitHub应用注册。 有关储存配置变量的详细信息,请参阅“在变量中存储信息”。

  3. 为应用生成私钥。 将所生成文件的内容作为机密进行存储。 (存储文件的全部内容,包括 -----BEGIN RSA PRIVATE KEY----------END RSA PRIVATE KEY-----。)有关详细信息,请参阅“管理GitHub应用的私钥”。 有关存储机密的详细信息,请参阅“在 GitHub Actions 中使用机密”。

  4. 在正确的账户上安装 GitHub App,并授予其相应权限以及对你希望工作流访问的任何仓库的访问权限。 有关详细信息,请参阅“安装自己的GitHub应用”。

  5. GitHub Actions在工作流中,创建一个安装访问令牌,可用于发出 API 请求。

    为此,可以使用 GitHub自有操作,如以下示例所示。 如果不想使用此操作,可以创建分支和修改 actions/create-github-app-token 操作,也可以编写脚本,使工作流手动创建安装令牌。 有关详细信息,请参阅“验证为 GitHub 应用程序安装”。

    以下示例工作流使用 actions/create-github-app-token 操作生成安装访问令牌。 然后,工作流使用该令牌通过 GitHub CLI 发起 API 请求。

    在以下工作流中,将 APP_CLIENT_ID 替换为你存储客户端 ID 的配置变量名称。 将 APP_PRIVATE_KEY 替换为存储应用私钥的机密的名称。

YAML
on:
  workflow_dispatch:
jobs:
  demo_app_authentication:
    runs-on: ubuntu-latest
    steps:
      - name: Generate a token
        id: generate-token
        uses: actions/create-github-app-token@v3
        with:
          client-id: ${{ vars.APP_CLIENT_ID }}
          private-key: ${{ secrets.APP_PRIVATE_KEY }}

      - name: Use the token
        env:
          GH_TOKEN: ${{ steps.generate-token.outputs.token }}
        run: |
          gh api octocat