关于 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 请求。 还可以将安装访问令牌传递给需要令牌的自定义操作。
-
注册一个 GitHub App。 为您的 GitHub App 注册项授予访问所需资源所需的权限。 有关详细信息,请参阅 注册GitHub应用 和 为GitHub应用选择权限。
-
将客户端 GitHub App ID 存储为 GitHub Actions 配置变量。 可以在应用的设置页上找到客户端 ID。 客户端 ID 不同于应用 ID。 有关导航到设置 GitHub App页的详细信息,请参阅 修改GitHub应用注册。 有关储存配置变量的详细信息,请参阅“在变量中存储信息”。
-
为应用生成私钥。 将所生成文件的内容作为机密进行存储。 (存储文件的全部内容,包括
-----BEGIN RSA PRIVATE KEY-----和-----END RSA PRIVATE KEY-----。)有关详细信息,请参阅“管理GitHub应用的私钥”。 有关存储机密的详细信息,请参阅“在 GitHub Actions 中使用机密”。 -
在正确的账户上安装 GitHub App,并授予其相应权限以及对你希望工作流访问的任何仓库的访问权限。 有关详细信息,请参阅“安装自己的GitHub应用”。
-
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替换为存储应用私钥的机密的名称。
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
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