NuGet 407 与 401:代理登录还是私有源凭据?
把 NuGet 源凭据与前向代理凭据分开,并检查真正执行还原的工具所使用的配置。
一次 NuGet 还原可能同时需要前向代理账户和私有源账户。根据响应判断该检查哪一份配置:
| 观察结果 | 从这里开始 |
|---|---|
| 代理返回 407 | 用于访问前向代理的路由和账户 |
| 包源返回 401 | 该源的认证配置 |
| 在得到响应前连接或 TLS 失败 | 端点、传输和证书方面的证据 |
源令牌无法回答代理的 407。同样,在得到响应前的连接或 TLS 失败并未确定哪个密码有误。
把代理与源分开配置
NuGet 的代理条目位于 config 之下。对于不含内嵌凭据的路由:
<configuration>
<config>
<add key="http_proxy" value="http://proxy.example:8080" />
</config>
</configuration>
把这个示例合并进合适的现有配置。对于允许公共中间人的公共源,HTTP 代理列表为这条无凭据路由提供了一个候选。把包源保留在各自的节中;用通用代理地址替换源 URL 会让中间人去找包。
文档中记录的 http_proxy.password 值是加密的。请使用受支持的配置工具,而不要在该字段中写入明文,也不要从另一台机器复制看似编码过的值并当作可移植的凭据格式。
检查真正失败的那次还原
明确客户端、用户和启动环境,然后找到其生效的配置层级。用户、计算机和解决方案设置都可能参与其中。旧的 devenv.exe.config 修复针对某个特定的 Visual Studio 进程;它不能说明命令行还原或构建服务读取了什么。在定位过时的代理条目时,应保留可用的包源和策略。
认证可正常工作后,继续跟进之后失败的 URL。源元数据和包内容可能使用不同的端点,因此一次请求被接受并不能证明整条还原路径。在修正时,应保留常规的包签名和 TLS 校验。