尝试通过npm连接到Azure DevOps Artifacts时“无法进行身份验证”;我收到E401错误

时间:2019-05-02 18:59:37

标签: node.js azure npm azure-devops

我正在尝试连接到Azure DevOps Artifacts提要,但是我一直收到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'后,我希望能够连接到供稿

5 个答案:

答案 0 :(得分:8)

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

vsts-npm-auth -config .npmrc

这样做,会弹出一个GUI,我可以在其中选择我想用来进行身份验证的帐户。

我希望这会有所帮助!

答案 1 :(得分:5)

即使我与同一台计算机上的其他存储库具有相同的.npmrc,我也遇到了无法连接的问题。 刚退出运行vsts-npm-auth -config .npmrc,大概对缓存的凭据感到满意。

但是,它的凭据似乎很糟糕。解决方案是强制刷新令牌: vsts-npm-auth -config .npmrc -force

答案 2 :(得分:2)

我刚刚通过Azure DevOps门户体验了这一陷阱:

我的一位同事无法连接。事实证明,如果像在MS Teams上共享源URL一样在浏览器中复制源URL,则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 :(得分:1)

https://docs.microsoft.com/en-us/azure/devops/artifacts/npm/npmrc?view=azure-devops&tabs=windows 此解决方案对我有用。在运行命令vsts-npm-auth -config .npmrc之前,需要安装其他PowerShell扩展。

答案 4 :(得分:0)

当Microsoft更新将VSTS的名称更改为Azure DevOps时,他们还更改了许多URL。大多数旧版本仍会重定向,但似乎您上面的.npmrc文件中存在不匹配项。更改 first 行中的URI以匹配其他行,因此如下所示:

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

那应该解除对你的封锁。

请注意,如果您在同一文件中同时拥有注册表,并且该文件已提交到源代码管理,则还将凭据保存到源代码管理。此处的最佳做法是将.npmrc保留在项目根中,只有 具有第一行,该行告诉npm连接到哪个注册表。然后,在~/.npmrc处创建一个新文件(如果使用Windows,则可以使用git bash帮助将其放置在正确的位置),只需添加其他两行,即带有您的凭据的行即可。这样可以使您的凭据在计算机上保持本地状态,并且可以安全地提交带有注册表注释的文件。

此外,请记住,您从Azure软件包注册表生成的凭据最多可以使用90天,因此在某些时候,您将再次收到未授权的错误消息,并且需要在本地{{ 1}}文件。