【问题标题】:Azure Artifacts Private npm Feed Authentication FailedAzure 工件私有 npm 源身份验证失败
【发布时间】:2020-04-07 19:28:56
【问题描述】:

几个月前,我在 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

【问题讨论】:

  • 我昨天发布了一个与您类似的problem,并且我的 npm 调试日志显示了相同的错误语句。但是,它适用于一个提要,但不适用于另一个提要,并且它们都使用 npmrc 文件中的新身份验证令牌结构。如果你能找到更多关于它的信息,我会很乐意学习。
  • @methon.dagger 这很有趣。我们也有 2 个提要。我无法使用新的令牌格式从其中任何一个安装包。如果您在我做之前找到了如何解决这个问题,请告诉我们。我找不到任何有关此问题的 Microsoft 指南。
  • 您可以尝试将strict-ssl=false 添加到全局 .npmrc 的末尾吗? (或运行 npm config set strict-ssl false)。我遇到了自签名证书错误。并通过添加strict-ssl=false 修复。不知道它是否适用于您的情况?
  • @LeviLu-MSFT 谢谢你的建议。不幸的是我已经尝试过了,我得到了同样的错误。我们也尝试过使用PAC 代码。您对代码格式发生变化的原因有任何见解吗?
  • @MichaelHancock U 我对格式更改知之甚少。我注意到这种代码格式允许用户同时使用密码和 PAT 进行身份验证。您是否尝试过使用您的域\用户名作为用户名,使用 base64_encoded_pa​​ssword 作为密码进行身份验证?

标签: npm azure-devops azure-artifacts azure-devops-server-2019 azure-devops-server


【解决方案1】:

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

【讨论】:

  • 感谢您的建议,但我怀疑这是问题所在。我们所有旧格式的旧令牌仍然有效。但是 Artifacts 页面现在为我生成的所有新令牌
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2015-01-16
    • 2017-05-13
    • 1970-01-01
    相关资源
    最近更新 更多