GitHub Actions 中的 GITHUB_TOKEN:工作原理、更改权限、自定义

2025-06-05

GitHub Actions 中的 GITHUB_TOKEN:工作原理、更改权限、自定义

今天我将向你详细介绍GitHub Actions 中的GITHUB_TOKEN。你将了解它是什么、它如何工作、如何自定义它的行为以及如何限制或更改它的权限

视频

与往常一样,如果您是视觉学习者,或者只是喜欢观看和聆听而不是阅读,那么这里有包含完整解释和演示的视频,公平地说,它比这篇文章完整得多。

视频链接:https://youtu.be/jEK07KPEjnY

如果你更喜欢阅读,那么...我们就继续吧:)

什么是 GITHUB_TOKEN

让我们首先了解 GitHub Actions 中的 GITHUB_TOKEN 是什么以及它是如何工作的。

GITHUB_TOKEN 是一个特殊的访问令牌,您可以使用它代表 GitHub Actions 进行身份验证。GitHub 会自动创建一个 GITHUB_TOKEN 密钥供您在工作流程中使用,您可以使用它在工作流程运行中进行身份验证。

它的工作原理是,当你在仓库中启用 GitHub Actions 时,GitHub 会在该仓库上安装一个 GitHub App。GITHUB_TOKEN密钥本质上是一个 GitHub App 安装访问令牌。

在每项作业开始之前,GitHub 都会从相应的 GitHub App 获取该作业的安装访问令牌。由于该 App 只能访问单个仓库,因此该令牌的权限仅限于包含您的工作流程的仓库。为了更加安全,该令牌会在作业完成后过期。

希望现在机制更清晰了。让我们快速看看如何使用 GITHUB_TOKEN

使用 GitHub 令牌

有两种使用令牌的方法:来自秘密和来自上下文



      - uses: actions/labeler@v2
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}


Enter fullscreen mode Exit fullscreen mode

在第一个示例中,我们使用secrets.GITHUB_TOKEN来使用它。如上所述,密钥是自动生成的,因此您可以立即使用。



      - name: Create a Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ github.token }}


Enter fullscreen mode Exit fullscreen mode

这里我们使用包含 token 的 GitHub 上下文。注意,两者是等效的。

个人访问令牌与 GITHUB_TOKEN

如果您正在思考“为什么我应该使用 GITHUB_TOKEN 而不是我的普通 PAT?”,请记住个人访问令牌始终可用,因此如果有人能够窃取该 PAT,他们可能会造成一些危害。

GITHUB_TOKEN 会在工作结束后立即过期。所以即使有人能够窃取它(这几乎是不可能的),他们基本上也无法做任何坏事。

默认权限

默认情况下,GITHUB_TOKEN 分配有相当全面的权限列表。

权限表

此表显示了默认授予 GITHUB_TOKEN 的权限。值得庆幸的是,拥有企业、组织或代码库管理员权限的用户可以将默认权限设置为 permissive 或 restricted

权限用户界面

那么,让我们看看如何更改 GITHUB_TOKEN 的权限以使其更加安全。

只需转到您的存储库或组织设置,然后单击操作

权限用户界面

Read and Write在这里,您可以通过选择(允许您访问内容并进行更改)或 来更改分配给您的令牌的权限Read-only

这虽然非常快捷,但另一方面也相当有限。如果我想更精细地分配权限怎么办?

通过 YAML 实现细粒度权限

您可以使用YAML 工作流permissions文件中的密钥来修改整个工作流或单个作业的 GITHUB_TOKEN 权限。



permissions:
  contents: write
  pull-requests: write 
  issues: read
  packages: none


Enter fullscreen mode Exit fullscreen mode

您可以使用上表列出的所有权限。此外,如下所示,如果您直接在 GitHub 界面中执行此操作,它将支持智能感知:

智能感知

当使用权限键时,所有未指定的权限都将设置为无访问权限,但元数据范围除外,它始终具有读取访问权限。

您可以在作业级别或整个工作流级别(或实际上两者)个性化令牌权限:



[...]
permissions:
contents: write
pull-requests: write

jobs:
job1:
runs-on: ubuntu-latest

<span class="na">steps</span><span class="pi">:</span>
  <span class="pi">[</span><span class="nv">...</span><span class="pi">]</span>
Enter fullscreen mode Exit fullscreen mode

job2:

runs-on: ubuntu-latest

permissions:
issues: write
steps:
[...]

Enter fullscreen mode Exit fullscreen mode




结论

希望你现在对 GITHUB_TOKEN 有了更深入的理解,包括它的作用以及如何正确设置它的权限。如果你还有其他疑问,请在下方评论区留言。

另外,请查看此视频,我在其中讨论了如何在 GitHub 中创建个人访问令牌。

喜欢、分享并关注我🚀以获取更多内容:

📽 YouTube
给我买杯咖啡
💖 Patreon
🌐 CoderDave.io 网站
👕周边商品
👦🏻 Facebook 页面
🐱‍💻 GitHub
👲🏻 Twitter
👴🏻 LinkedIn
🔉 播

给我买杯咖啡

文章来源:https://dev.to/github/the-githubtoken-in-github-actions-how-it-works-change-permissions-customizations-3cgp
PREV
GitHub Web 编辑器:浏览器中的免费 VSCode
NEXT
在 CLI 中开始使用 GitHub Copilot🚀 在 CLI 中使用 Copilot 的示例 结论