使用 Trusted Publishing 提升 npm 包发布安全性
版权声明
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
鲁飞
扫码关注公众号
扫码阅读
手机扫码阅读
**文章主旨:**
本文介绍了 npm 推出的 Trusted Publishing(可信发布)机制,通过 OIDC 实现从 CI/CD 工作流安全发布 npm 包,消除长期 token 泄露风险,并提供了详细的设置步骤。
**关键要点:**
1. Trusted Publishing 基于 OpenID Connect(OIDC),无需在 CI 中存储长期 npm token,每次发布使用短期、工作流特定的凭证。
2. 该机制能有效降低 token 泄露带来的供应链攻击风险,并自动附加来源证明(provenance)。
3. 设置需在 npm 包设置页面配置可信发布者(如 GitHub Actions),并在 CI 工作流中添加 `id-token: write` 权限。
4. 当前要求 npm CLI ≥ 11.5.1 和 Node ≥ 22.14.0。
5. 建议所有开源项目逐步迁移到此方案。
**内容结构:**
1. **引言**:提出传统 npm 发布方式依赖长期 token 的安全隐患,引出 npm 于 2025 年 7 月推出的 Trusted Publishing 机制。
2. **什么是 Trusted Publishing**:基于 OIDC 的可信发布功能,无长期 token、消除令牌安全风险、短期凭证自动过期、绑定 CI 身份、降低泄露风险、自动获取来源证明。
3. **传统发布方式的问题**:依赖长期 token 存储于 GitHub Secrets,token 泄露可导致恶意发布;即使 npm 限制 token 有效期至 90 天,仍需频繁轮换。
4. **Trusted Publishing 的工作原理**:GitHub Actions 在运行时向 npm 发起 OIDC 身份请求,npm 验证请求来源是否匹配已配置的可信仓库,匹配后签发短期访问令牌,CI 使用该令牌执行 `npm publish`。
5. **设置 Trusted Publishing**:
- npm 侧:进入包设置页面的 Trusted Publisher,选择 GitHub Actions,填写用户/组织、仓库、工作流文件名。
- GitHub Actions 配置:修改工作流 YAML,添加 `permissions: id-token: write`(必须),移除原有的 npm token 设置。
- 发布成功后邮件通知会包含 CI 来源信息。
6. **注意事项**:Trusted Publishing 需要 npm CLI 11.5.1+ 和 Node 22.14.0+。
7. **结论**:Trusted Publishing 是 npm 供应链安全的重要升级,建议所有开源项目逐步迁移。
**文章总结:**
本文系统性地阐述了 npm Trusted Publishing 机制的原理、优势与配置方法,强烈建议开发者采用该方案以提升 npm 发布流程的安全性。
文章来源:
鲁飞
鲁飞
扫码关注公众号
还在用多套工具管项目?
一个平台搞定产品、项目、质量与效能,告别整合之苦,实现全流程闭环。
查看方案
鲁飞的其他文章
新注册的域名被微信拦截怎么处理?
前段时间新注册了一个域名,没有在微信测试访问,等用到的时候发现居然被微信拦截了...
Bitwarden Secrets Manager:简化 DevOps 的机密管理
Bitwarden Secrets Manager 为 DevOps 团队提供了一种更加安全、便捷的方式来管理和集成机密信息。
HMAC 签名编码的坑:Go 和 PHP 的不同处理方式
本文将以 Go 和 PHP 为例,探讨为什么直接对 HMAC 签名进行 Base64 编码与先转换为 16 进制字符串再编码的结果不同。
通过微信开放平台授权获取公众号文章
如果想要实现一个将公众号文章搬运到某个社区中去发布的功能,除了使用爬虫等方法,还可以通过微信开放平台授权,调用官方接口来获取公众号文章。
simps/mqtt v1.1.1 版本发布,支持 MQTT5 中的大部分 Property
在 MQTT 5.0 协议中增加了很多属性。不同的报文类型之间,属性也会不同,一共有 27 种属性。
加入社区微信群
与行业大咖零距离交流学习
PMO实践白皮书
白皮书上线
白皮书上线