如何调试 'npm ERR! 403 In most cases, you or one of your dependencies are requesting a package version that is forbidden by your security policy.'

How to debug 'npm ERR! 403 In most cases, you or one of your dependencies are requesting a package version that is forbidden by your security policy.'

我目前正在尝试设置 Jenkins 和私有 npm 存储库 (Sonatype Nexus)。 当我尝试在 Jenkins 构建管道中发布到存储库时出现以下错误。

+ npm publish --registry https://<my-private-registry>/repository/npm-private/
npm notice 
npm notice package: ts-acoustics@0.0.0
npm notice === Tarball Contents === 
npm notice 2.4kB  Jenkinsfile                       
...
('notice' level info about the files)
...
npm notice === Tarball Details === 
npm notice name:          ts-acoustics                            
npm notice version:       0.0.0                                   
npm notice package size:  13.8 kB                                 
npm notice unpacked size: 47.5 kB                                 
npm notice shasum:        554b6d2b41321d78e00f6a309bb61c9181a2e3d6
npm notice integrity:     sha512-QtExdu6IqZ+lH[...]r+HXolo4YCFPg==
npm notice total files:   17                                      
npm notice 
npm ERR! code E403
npm ERR! 403 403 Forbidden - PUT https://<my-private-registry>/repository/npm-private/ts-acoustics
npm ERR! 403 In most cases, you or one of your dependencies are requesting
npm ERR! 403 a package version that is forbidden by your security policy.

我在 Nexus 日志中找不到关于为什么禁止它的更多信息,this open GitHub bug 告诉我在大多数情况下上述错误文本指向错误的方向?!

知道如何继续进行发布工作吗?!


更新 1:我刚刚看到我在尝试手动发布时遇到了同样的问题!因此出于简单原因,Jenkins 不在等式中。

更新 2: 我可以做到 npm adduser --registry... 并且 npm 告诉我

Logged in as <my-user> on https://<my-private-registry>/repository/npm-private/.

当我执行 npm whoami --registry... 时,它会显示正确的用户名。

当我在项目中做npm publish --registry...时,显示403错误

如何调试:

正如您从所有答案中看到的那样,有很多事情会导致相同的失败消息。以下是找到根本原因的方法:

在 Nexus 存储库管理器中 -> 菜单项“日志记录”
在那里,您可以简单地更改 Nexus 在运行时包含的每个 java 包的日志级别。

将包括“security”或“rest”在内的包的所有 LogLevel 更改为 TRACE 并再次触发您的请求。

LogViewer(也是 Nexus 的一部分)中,您现在有望看到所有必要的信息以了解问题。


在我的例子中,我必须将 nx-repository-view-*-*-edit 权限添加到我为 Jenkins 用来登录 Nexus 的用户创建的角色。我以为nx-repository-view-*-*-add就可以发表了

希望对您有所帮助!

我有完全相同的 NPM ERR! 403 问题,最后通过断开所有 VPN 来解决。

如果您像我一样遵循 Node Cookbook 示例,或者您刚刚创建帐户的其他示例,那么您的错误可能与我的一样。

我没有验证我的电子邮件地址并得到了同样的错误(这是一个新帐户)。一旦我验证,它就可以工作(甚至在 VPN 上)。

检查您的电子邮件并验证您的帐户。

我在发布到 JFrog Artifactory 时遇到了同样的错误。这是因为存储库中已经有一个同名的包。为了解决这个问题,要么删除旧包,要么更改新包的 version/name。

我有同样的错误,这似乎涵盖了这些问题。 我通过重命名 package.json 中的包名称解决了这个问题。 如果您已经发布了一个版本,请确保每次发布时也更新版本。

错误可能是由于 public 的包冲突造成的。只需更改 package.json 中的包名称,然后重试!

这主要出现在两个场景

  1. 错误可能是由于 * 包冲突 即 public。只需 更改 package.json 中的包名称,然后重试!

  2. 您可能最近注册了并且忘记验证电子邮件。所以,你可以登录这个link:https://www.npmjs.com/login

    在 header 上,您会看到一个选项,可以将验证 link 发送到您的电子邮箱。 验证完成后,再次尝试发布。

备注:2) 对我有用。

当我错误地尝试使用只读访问令牌发布包时遇到了这个问题。我在设置 -> 帐户 -> 访问令牌中为自己创建了一个新的访问令牌并解决了这个问题。

我也遇到了这个错误。我更改了 package.json 文件的包名称,并修复了错误。

{ "name": "digi-clock", "version": "1.0.0",}

更改此“名称”的值

在我的例子中,罪魁祸首是 AWS WAF 规则 EC2MetaDataSSRF_BODY

虽然我不明白它是如何关联的,但更新到最新版本 git 解决了我组织中所有遇到此问题的人 ‍♂️

在发布时更新 PACKAGE-VERSION,为我解决了这个问题。

对我来说,将 npm 从 v6 更新到 v8 解决了这个问题。旧的 package-lock 布局对每个包都有一个完整的注册表路径,其中一些路径不是 up-to-date。

对我来说,它有助于在命令行中登录 NPM,然后进行发布。

npm login

npm publish

并确保发布新版本。