尝试通过npm连接Azure DevOps Artifacts feed时出现“无法验证”错误;遇到E401错误。

104

我试图连接到Azure DevOps Artifacts feed,但一直收到E401错误。

我在另一台电脑上尝试过,并成功连接。我已经卸载并重新安装了Node.js,但仍然出现错误。

当我运行“npm install”时,下面是我收到的错误:

npm ERR! code E401
npm ERR! Unable to authenticate, need: Bearer authorization_uri=https://login.windows.net/*********, Basic realm="https://pkgsprodcus1.pkgs.visualstudio.com/", TFS-Federated

以下是添加到.npmrc文件中的内容

registry=https://[org].pkgs.visualstudio.com/_packaging/[feed].Npm/npm/registry
//pkgs.dev.azure.com/[org]/_packaging/[feed].Npm/npm/registry/:_authToken=[token]
//pkgs.dev.azure.com/[org]/_packaging/[feed].Npm/npm/:_authToken=[token]

我期望在将我的信息添加到 .npmrc 文件并运行 'npm install' 后能够连接到该提要(feed)

13个回答

193

我遇到一个问题,即使我和同台机器上的其他代码库使用相同的 .npmrc 文件,也无法连接。 运行 vsts-npm-auth -config .npmrc只是退出了,可能是已经有了缓存的凭据。

但是,它所拥有的凭据似乎是错误的。解决方案是强制刷新令牌: vsts-npm-auth -config .npmrc -force


2
在哪里运行这个程序?我尝试在PowerShell和常规命令提示符中运行,还在Node命令提示符中运行,但无论在哪里都会显示“不是识别的命令”。 - Sachin
20
安装VSTS-NPM-Auth时,请在命令行中输入“npm install -g vsts-npm-auth”。如果在打开新的命令行后该命令无法工作,则尝试使用“npx vsts-npm-auth”。 - TamusJRoyce
3
每当令牌过期时,这个问题经常发生。这个强制刷新命令很好用……感谢你做了这件事。你拯救了我的一天,兄弟。 - Karthikkumar
2
谢谢。我遇到了一个奇怪的问题,我的虚拟机无法使用 SSL,会出现证书错误。使用 -force 命令可以让窗口保持打开状态,这样我就能点击“仍要访问网站”的选项了。 - HankCa
vsts-npm-auth -config .npmrc -force 对我起了作用,非常感谢。 - MAQ
显示剩余6条评论

31

通常这种情况发生在您最近更改了密码时。为了解决这个问题,我在VS Code的PowerShell终端(任何终端都可以)中运行了以下命令:

vsts-npm-auth -config .npmrc

通过这样做,一个GUI弹出,在那里我能够选择我想要用来认证的账户。

9
如果第一次不起作用,尝试安装npm install -g vsts-npm-auth包,然后运行上述命令。 - bonnu18
1
vsts-npm-auth 只能在 Windows 机器上运行,因此它不是一个解决方案。 - dawid debinski
7
"vsts-npm-auth" 不支持 macOS。 - Rupesh

15

当 Microsoft 将 VSTS 的名称更改为 Azure DevOps 时,他们也更改了许多 URL。大多数旧的 URL 仍然会重定向,但是在上面的 .npmrc 文件中似乎存在不匹配的情况。将第一行中的 URI 更改为与其他行相匹配,以便如下所示:

registry=https://pkgs.dev.azure.com/[org]/_packaging/[feed].Npm/npm/registry

这应该可以解除您的阻止。

需要注意的是,如果您把注册表和凭据都放在同一个文件中,并且该文件被提交到源代码控制中,那么您也将凭据保存到源代码控制中。最佳做法是在项目根目录下保留 .npmrc 文件,该文件只包含第一行,即告诉 npm 连接到哪个注册表的行。然后,在 ~/.npmrc 中创建一个新文件(如果您使用 Windows,则可以使用 git bash 帮助将其放在正确的位置),并添加另外两行,其中包括您的凭据。这将使您的凭据仅保存在本地计算机上,而带有注册表信息的文件则可以安全提交。

此外,请记住,从 Azure 包注册表生成的凭据最长有效期为 90 天,因此某些时候您将再次收到未经授权的错误消息,并需要更新本地 ~/.npmrc 文件中的凭据。


13

我刚刚在Azure DevOps门户网站上遇到了这个问题:

我的一个同事无法连接。原来,如果您像我一样在浏览器中复制订阅源URL并在MS Teams中共享它,则Azure DevOps门户网站会在订阅源名称后插入文本%40Local

我的门户网站显示如下:

; begin auth token
//pkgs.dev.azure.com/<company>/_packaging/<feed>/npm/registry/:username=xxx
//pkgs.dev.azure.com/<company>/_packaging/<feed>/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//pkgs.dev.azure.com/<company>/_packaging/<feed>/npm/registry/:email=npm requires email to be set but doesn't use the value
//pkgs.dev.azure.com/<company>/_packaging/<feed>/npm/:username=xxx
//pkgs.dev.azure.com/<company>/_packaging/<feed>/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//pkgs.dev.azure.com/<company>/_packaging/<feed>/npm/:email=npm requires email to be set but doesn't use the value
; end auth token

他的门户网站显示了什么:
; begin auth token
//pkgs.dev.azure.com/<company>/_packaging/<feed>%40Local/npm/registry/:username=xxx
//pkgs.dev.azure.com/<company>/_packaging/<feed>%40Local/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//pkgs.dev.azure.com/<company>/_packaging/<feed>%40Local/npm/registry/:email=npm requires email to be set but doesn't use the value
//pkgs.dev.azure.com/<company>/_packaging/<feed>%40Local/npm/:username=xxx
//pkgs.dev.azure.com/<company>/_packaging/<feed>%40Local/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//pkgs.dev.azure.com/<company>/_packaging/<feed>%40Local/npm/:email=npm requires email to be set but doesn't use the value
; end auth token

这导致了项目中.npmrc文件中的仓库URL与实际不符。

要修复它:确保URL正确且在用户.npmrc文件和项目.npmrc文件中匹配。


3

3

我看到的许多答案都不能解决我的问题,这是解决方法:

如果你还没有运行过,请输入以下命令:npm i -g vsts-npm-auth
打开 PowerShell 并输入以下命令:vsts-npm-auth -config .npmrc -T $HOME/.npmrc

这两个命令解决了我的问题。


3
如果你遇到这个问题,要如何运行npm i -g vsts-npm-auth呢? - runnerpaul
@runnerpaul 这个命令只会在你的系统上全局安装vsts-npm-auth包,而与此问题无关。 - Kim Skogsmo
@Kim Skogsmo,我认为runnerpaul的意思是当您尝试下载vsts-npm-auth时,它也会显示401,因为授权失败。所以在这种情况下,您永远无法通过那个步骤。 (PAT令牌应该有助于进行第一次下载) - Michael

2

我因为一个稍微不同的原因遇到了相同的错误信息,而且一直在苦苦思索。在这里发帖,以便帮助其他人。

对于我来说,vsts-npm-auth将其令牌/凭据输出到旧的“homes”共享映射到W:驱动器中的.npmrc文件中。 (仍然不知道为什么会这样做)

而npm正在寻找那些凭据/令牌位于c:\ users \ [username] \ .npmrc,并找到旧的过期凭据。

我的解决方法是将w:\ .npmrc中的凭据复制并粘贴到c:\ users \ [username] \ .npmrc中的凭据上。


1
我的问题是由于运行vsts-npm-auth命令将用户名和密码的URL写入了我的.npmrc文件中,路径为%USERPROFILE%\.npmrc,但缺少最后一个URL段/registry。我在用户.npmrc文件中添加了/registry段,问题解决了。

0
我们在使用多个有范围的工件库时也遇到了这个问题,但这里提供的答案都没有帮助。
运行 vsts-npm-auth -config .npmrc 命令成功,但运行 npm 命令时,会响应 OP 问题中提到的错误。
我们在项目的 .npmrc 文件中添加了以下行:
always-auth=true

完成此操作后,我们重新运行了npm命令并成功进行了身份验证。


0

按照以下步骤进行操作

  1. npm install -g vsts-npm-auth
  2. vsts-npm-auth -config ./$filepath/.npmrc 你应该提到文件路径

如果问题仍然存在,则使用以下命令(它将重定向到一个弹出窗口,您需要使用您的凭据重新登录) 3. vsts-npm-auth -config ./$filepath/.npmrc -r -f -v normal


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接