本教程介绍如何在 GITHUB_TOKEN 工作流中使用 GitHub Actions 身份验证,包括将令牌传递给操作、发出 API 请求和配置安全自动化权限的示例。
有关参考信息,请参阅 GitHub Actions 的工作流语法。
在工作流程中使用 GITHUB_TOKEN
可以使用GITHUB_TOKEN标准语法来引用机密: ${{ secrets.GITHUB_TOKEN }} 使用 GITHUB_TOKEN 包含将令牌作为输入传递给操作的示例,或使用令牌发出经过身份验证的 GitHub API 请求。
重要
即使工作流没有明确将 GITHUB_TOKEN 传递到操作,操作也可以通过 github.token 上下文访问 GITHUB_TOKEN。 作为一种良好的安全做法,应该始终通过限制授予 GITHUB_TOKEN 的权限,确保操作只有所需的最低访问权限。 有关详细信息,请参阅“GitHub Actions 的工作流语法”。
示例 1:将 GITHUB_TOKEN 作为输入传递
此示例工作流程使用 GitHub CLI,该方式需要 GITHUB_TOKEN 作为 GH_TOKEN 输入参数的值:
name: Open new issue
on: workflow_dispatch
jobs:
open-issue:
runs-on: ubuntu-latest
permissions:
contents: read
issues: write
steps:
- run: |
gh issue --repo ${{ github.repository }} \
create --title "Issue title" --body "Issue body"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
name: Open new issue
on: workflow_dispatch
jobs:
open-issue:
runs-on: ubuntu-latest
permissions:
contents: read
issues: write
steps:
- run: |
gh issue --repo ${{ github.repository }} \
create --title "Issue title" --body "Issue body"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
例2:调用 REST API
可以使用 GITHUB_TOKEN 进行经过验证的 API 调用。 此示例工作流使用 GitHub REST API 创建问题:
name: Create issue on commit
on: [ push ]
jobs:
create_issue:
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- name: Create issue using REST API
run: |
curl --request POST \
--url https://api.github.com/repos/${{ github.repository }}/issues \
--header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' \
--header 'content-type: application/json' \
--data '{
"title": "Automated issue for commit: ${{ github.sha }}",
"body": "This issue was automatically created by the GitHub Action workflow **${{ github.workflow }}**. \n\n The commit hash was: _${{ github.sha }}_."
}' \
--fail
修改 GITHUB_TOKEN 的权限
在工作流程文件中使用 permissions 键来修改 GITHUB_TOKEN 对于整个工作流程或单个作业的权限。 这允许您为工作流程或作业配置所需的最小权限。 作为一种良好的安全做法,应授予 GITHUB_TOKEN 最低所需访问权限。
若要查看可使用权限的列表及其参数化名称,请参阅 管理个人访问令牌。
本文前面部分中的两个工作流程示例展示了在作业级别使用的 permissions 键。
授予额外权限
如果需要需要不需要在工作流 GITHUB_TOKEN中不可用的权限的令牌,请在 GitHub App 工作流中创建并生成安装访问令牌。 有关详细信息,请参阅“在GitHub Actions工作流中使用GitHub应用发出经过身份验证的 API 请求”。 或者,可以创建一个 personal access token、将其存储为存储库中的机密,并使用带有语法的工作流中的 ${{ secrets.SECRET_NAME }} 令牌。 有关详细信息,请参阅 管理个人访问令牌 和 在 GitHub Actions 中使用机密。