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

Cou*_*eyH 45 azure node.js 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
Run Code Online (Sandbox Code Playgroud)

下面是添加到 .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]
Run Code Online (Sandbox Code Playgroud)

我希望在将我的信息添加到 .npmrc 文件并运行“npm install”后连接到提要

Sim*_*ugh 65

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

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

  • `npm install -g vsts-npm-auth` 如果打开新命令行后该命令不起作用,则`npx vsts-npm-auth` (9认同)
  • 每当令牌过期时,此问题就会经常发生。这个强制刷新命令工作得很好......谢谢你。你拯救了我的日子,兄弟。 (3认同)
  • 在哪里运行这个?我在 Powershell 和常规命令提示符中尝试过,也在 Node 命令提示符中尝试过,每个地方都说它是无法识别的命令。 (2认同)
  • 谢谢。我遇到一个奇怪的问题,我的虚拟机在没有证书错误的情况下无法使用 SSL。使用“-force”允许窗口保持打开状态,这样我就可以单击“无论如何访问网站”。 (2认同)

小智 19

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

vsts-npm-auth -config .npmrc
Run Code Online (Sandbox Code Playgroud)

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

我希望这有帮助!

  • `vsts-npm-auth` 不适用于 macOS (7认同)
  • 如果这不起作用,首先尝试安装包“npm install -g vsts-npm-auth”,然后安装上面的命令。 (4认同)

mhe*_*zig 9

当微软更新将 VSTS 的名称更改为 Azure DevOps 时,他们也更改了许多 URL。大多数旧的仍然重定向,但看起来.npmrc上面的文件不匹配。更改第一行中的 URI以匹配其他行,如下所示:

registry=https://pkgs.dev.azure.com/[org]/_packaging/[feed].Npm/npm/registry
Run Code Online (Sandbox Code Playgroud)

那应该解锁你。

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

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


Jon*_*ved 5

我刚刚在 Azure DevOps 门户中遇到了这个问题:

我的一位同事无法连接。事实证明,%40Local如果您在浏览器中复制提要 URL,就像我在 MS Teams 上共享它时所做的那样,Azure DevOps 门户会在提要名称后插入文本。

我的门户显示的内容:

; 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
Run Code Online (Sandbox Code Playgroud)

他的门户网站显示的内容:

; 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
Run Code Online (Sandbox Code Playgroud)

这导致与项目中的存储库 URL 不匹配 .npmrc

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