使用 NuGet 凭据提供程序在 Visual Studio 中对源进行身份验证
NuGet Visual Studio 扩展 3.6+ 支持凭据提供程序,使 NuGet 能够处理经过身份验证的源。 为 Visual Studio 安装 NuGet 凭据提供程序后,NuGet Visual Studio 扩展会根据需要自动获取和刷新已验证的源的凭据。
可以在 vsCredentialProvider 示例 找到示例实现。
在 Visual Studio 中,NuGet 使用一个内部的 VsCredentialProviderImporter
,该机制也会扫描插件凭据提供程序。 这些插件凭据提供程序必须可被发现为类型为 IVsCredentialProvider
的 MEF 导出项。
从 Visual Studio 中的 4.8+ NuGet 开始,也支持新的跨平台身份验证插件,但出于性能原因,不建议采用这种方法。
备注
Visual Studio 的 NuGet 凭据提供程序必须安装为常规 Visual Studio 扩展,并且需要 Visual Studio 2017 或更高版本。
Visual Studio 的 NuGet 凭据提供程序仅在 Visual Studio 中工作(不适用于 dotnet restore 或 nuget.exe)。 有关具有 nuget.exe的凭据提供程序,请参阅 nuget.exe 凭据提供程序。 有关 dotnet 和 msbuild 中的凭据提供程序,请参阅 NuGet 跨平台插件
NuGet Visual Studio 扩展 3.6+ 实现了一个用于获取凭据的内部 CredentialService。 CredentialService 包含内置凭据提供程序和插件凭据提供程序的列表。 在获取凭据之前,会按顺序尝试每个提供程序。
在凭据获取期间,凭据服务将按以下顺序尝试凭据提供程序,一旦获取凭据,就会停止:
- 凭证将从 NuGet 配置文件中获取(使用内置的
SettingsCredentialProvider
)。 - 将按顺序尝试 Visual Studio 凭据提供程序。
- 尝试按顺序使用所有 NuGet 跨平台凭据提供程序。
- 如果尚未获取凭据,系统会使用标准基本身份验证对话框提示用户输入凭据。
若要为 Visual Studio 创建 NuGet 凭据提供程序,请创建一个 Visual Studio 扩展,该扩展公开实现 IVsCredentialProvider
类型的公共 MEF 导出,并遵循下面概述的原则。
public interface IVsCredentialProvider
{
Task<ICredentials> GetCredentialsAsync(
Uri uri,
IWebProxy proxy,
bool isProxyRequest,
bool isRetry,
bool nonInteractive,
CancellationToken cancellationToken);
}
可以在 vsCredentialProvider 示例 找到示例实现。
每个 Visual Studio 的 NuGet 凭据提供程序都应当:
- 确定它是否可以在启动凭据获取之前为目标 URI 提供凭据。 如果提供程序无法提供目标源的凭据,则应返回
null
。 - 如果提供程序确实处理目标 URI 的请求,但无法提供凭据,则应引发异常。
Visual Studio 的自定义 NuGet 凭据提供程序必须实现 NuGet.VisualStudio 包中提供的 IVsCredentialProvider
接口。
输入参数 | 描述 |
---|---|
URI Uri | 正在请求凭据的包源 URI。 |
IWebProxy 代理 | 在网络上通信时要使用的 Web 代理。 如果未配置代理身份验证,则为 Null。 |
bool isProxyRequest | 如果此请求是获取代理身份验证凭据,则为真。 如果实现对获取代理凭据无效,则应返回 null。 |
bool isRetry | 如此 如果以前为此 Uri 请求了凭据,但提供的凭据不允许授权访问。 |
bool nonInteractive | 如果为 true,凭据提供程序必须禁止所有用户提示并使用默认值。 |
CancellationToken 取消令牌 | 应检查此取消令牌,用来确定请求凭据的操作是否已被取消。 |
返回值:实现 System.Net.ICredentials
接口的凭据对象。