NPM 发包的OIDC配置以及对应的GitHub Actions配置更改
使用NPM的Access Tokens做发包密钥检查还是存在泄露的风险, 目前NPM官方更推荐使用OIDC(OpenID Connect)来进行认证授权, 不需要在GitHub Actions中存储任何敏感的密钥.
本文将逐步讲解整个替换过程, 用时估计5-10mins, 包括NPM侧的配置以及CI/CD侧的配置更改.
NPM侧的OIDC配置
在 NPM 包的Settings中, 第一个就是Trusted Publisher, 这个包发布流水线走的是GitHub Actions, 选择第一个
这里填的内容就比较常规, user name + repository name, workflow name这里只填文件名不需要加路径,会自动去仓库的.github/workflows/下匹配
环境名在目前版本无需填写
最后这里的NPM是建议启用两步验证并禁用 token 验证的, 启用OIDC配置后之前配置给GitHub Actions配置的token就可以删除了
GitHub Actions的配置文件更改
首先需要删除之前配置的NPM token, 然后添加新的验证方式 如果是第一次配置就可以直接添加新的验证方式了
添加OIDC配置文件
删除token 原来的配置文件如下, 这里需要删除注释的两行
YML
- name: Publish to npm
run: pnpm publish --no-git-checks
env: # Delete
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} # Delete在配置文件中添加下面这段
YML
permissions:
id-token: write # Required for OIDC
contents: readnode版本需要改为v6
YML
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: "24"
registry-url: "https://registry.npmjs.org"
package-manager-cache: false # never use caching in release builds完整的配置文件如下
YML
name: Publish to npm
on:
push:
tags:
- "v*"
permissions:
id-token: write # Required for OIDC
contents: read
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
env:
PNPM_MINIMUM_RELEASE_AGE: "0"
steps:
- name: Checkout
uses: actions/checkout@v6 # 这里需要用v6
- name: Setup Node.js # 这里需要用v6, 建议整段复制
uses: actions/setup-node@v6
with:
node-version: "24"
registry-url: "https://registry.npmjs.org"
package-manager-cache: false
- name: Setup pnpm
uses: pnpm/action-setup@v6
with:
version: 10
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm build
- name: Publish to npm
run: pnpm publish --no-git-checks将新的配置文件推送上去之后可以打tag并发布了, 记得去GitHub的仓库设置里删除创建的NPM_TOKEN