6

几个月前,我在 Azure Artifacts 中创建了一个私有 npm 源。使用此提要进行身份验证工作正常。

最近,其他人已经开始使用此提要,但使用他们从 Azure Artifacts 生成的令牌对他们来说身份验证不起作用。npm安装时出现以下错误

npm 错误!无法进行身份验证,您的身份验证令牌似乎是

无效的。npm 错误!要更正此问题,请尝试再次登录:

npm 错误!npm 登录

在 npm 调试日志中有这个错误

详细堆栈错误:无法验证,需要:Bearer,Basic realm="{{redacted url}}",NTLM


看来,我们放在全局 .npmrc 文件中的身份验证令牌的结构在 Azure Artifacts 中发生了变化

从:

; Treat this auth token like a password. Do not share it with anyone, including Microsoft support. This token expires on or before 27/02/2020.

; begin auth token

//{{redacted URL}}/_packaging/{{redacted user name}}/npm/registry/:_authToken={{redacted token string}}

//{redacted URL}}/_packaging/{{redacted user name}}/npm/:_authToken={{redacted token string}}

; end auth token

; Treat this auth token like a password. Do not share it with anyone, including Microsoft support. This token expires on or before 14/04/2020.
; begin auth token
//{{redacted url}}/npm/registry/:username={{redacted username}}
//{{redacted url}}/npm/registry/:_password={{redacted password}}
//{{redacted url}}/npm/registry/:email=npm requires email to be set but doesn't use the value
//{{redacted url}}/_packaging/{{redacted username}}/npm/:username={{redacted user name}}
//{{redacted url}}/_packaging/{{redacted username}}/npm/:_password={{redacted password}}
//{{redacted url}}/_packaging/{{redacted username}}/npm/:email=npm requires email to be set but doesn't use the value
; end auth token

当使用第二个令牌(或者实际上是我现在从 Azure Artifacts 生成的任何令牌)时,我们不能npm install,我们得到上面显示的错误。如果其他人使用与我相同的令牌(以旧格式),则可以正常工作。但是这个令牌很快就会过期。

我尝试提供一个电子邮件地址而不是字符串“npm 需要设置电子邮件但不使用该值”,但这也不起作用。

这可能无关,但我们最近从 tfs 版本 16.131.28507.4 升级到 Azure Devops Server 版本 Dev17.M153.3。

有谁知道为什么身份验证令牌格式发生了变化?和/或如何使新令牌与我的私人提要一起使用?


npm 版本:6.13.0

节点版本:10.12.0

Azure Devops 服务器版本:Dev17.M153.3

4

2 回答 2

0

我不确定这是否会导致您的问题 - 在我们的 azure devops 实例上,我们最近启用了条件访问,这可以禁用许多基于 PAT/令牌的身份验证流而没有明确的错误消息 - 例如,如果您正在使用令牌在您的正常机器/访问路径之外(我们正在将令牌传递给我们无法使用 2FA 进行身份验证的构建服务,并且它只是在一夜之间停止工作)

于 2020-01-15T22:55:17.153 回答
0

在进一步调查并与 Microsoft Azure 支持人员交谈后,我们确定了导致问​​题的原因。

如果您的 TFS (Azure Devops) 实例托管在运行 IIS 基本身份验证的计算机上,则为 Azure Artifacts 推出的新令牌格式将不再有效。这可能只适用于自己在本地托管他们的 TFS 实例的人。

唯一可用的解决方法是修改此新令牌并将 TFS 用户的用户名和 base 64 编码密码放入令牌字符串中出现的两个位置的registry/:username=和字符串之后。registry/:_password=这并不理想,因为您实际上必须在构建服务器上以几乎纯文本的形式存储密码。但是,如果您确实需要启用 IIS 基本身份验证,这似乎是您现在唯一的选择。禁用此功能并使用不同的身份验证方案确实可以修复令牌身份验证,您可以避免必须执行上述操作。

于 2020-04-07T11:28:56.750 回答