如何在不破坏身份验证的情况下将注册表与 Yarn 2 中的范围关联起来?

Mat*_*ell 9 security yarnpkg yarnpkg-v2

本文建议在项目中添加配置.npmrc,将范围与私有注册表关联起来,以降低 npm 替换攻击的风险(有人可能会故意发布同名的恶意公共包)。

如何在 Yarn 2 项目中实现类似的效果?我尝试.yarnrc.yml在项目根目录中添加一个文件:

npmScopes:
  someScope:
    npmRegistryServer: https://npm.pkg.github.com
Run Code Online (Sandbox Code Playgroud)

~/.yarnrc.yml我们还为每个开发人员提供了一个具有类似配置的主目录,但还具有适当的npmAuthToken身份验证功能。

但是,当我执行 a 时yarn install,我收到Invalid authentication (as an anonymous user)该范围内的包的错误。据推测,特定于项目的.yarnrc.yml设置会覆盖每个用户的设置~/.yarnrc.yml,因此身份验证信息不再存在?

我所寻求的缓解措施是,如果开发人员忘记运行yarn npm login,那么它不会检查公共注册表中特定范围内的包。在 Yarn 2 中有办法做到这一点吗?

小智 1

我刚刚遇到了同样的问题。问题是您必须定义每个部分的身份验证(如本问题评论中指出的那样)。这也适用于npmRegistries.

npmScopes:
  someScope:
    npmRegistryServer: <your-registry-server>
    npmAuthToken: <your-token>
    npmAlwaysAuth: true
Run Code Online (Sandbox Code Playgroud)

请注意,层次定义中的重复配置.yarnrc.yml不会被合并,而是被替换(请参阅此评论)。因此,如果npmScopes已经在主目录中声明,它将被项目中的声明覆盖。