使用 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 跨平臺外掛程式
建立 Visual Studio 的 NuGet 認證提供者
NuGet Visual Studio 擴充功能 3.6+ 會實作用來取得認證的內部 CredentialService。 CredentialService 具有內建和外掛程式認證提供者的清單。 系統會循序嘗試每個提供者,直到取得認證為止。
在認證取得期間,認證服務會依下列順序嘗試認證提供者,並在取得認證后立即停止:
- 系統會從 NuGet 組態檔擷取認證(使用內
SettingsCredentialProvider
建的 )。 - 如果套件來源位於 Visual Studio Team Services 上,
VisualStudioAccountProvider
將會使用 。 - 所有其他外掛程式 Visual Studio 認證提供者都會循序嘗試。
- 嘗試循序使用所有 NuGet 跨平台認證提供者。
- 如果尚未取得認證,系統會使用標準基本身份驗證對話框提示使用者輸入認證。
實作 IVsCredentialProvider.GetCredentialsAsync
若要建立 Visual Studio 的 NuGet 認證提供者,請建立 Visual Studio 延伸模組,以公開實作類型的公用 MEF 導出 IVsCredentialProvider
,並遵循以下所述的原則。
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 認證提供者必須實IVsCredentialProvider
作 NuGet.VisualStudio 套件中可用的介面。
GetCredentialAsync
輸入參數 | 描述 |
---|---|
URI URI | 要求認證的套件來源 URI。 |
IWebProxy Proxy | 在網路上通訊時要使用的 Web Proxy。 如果沒有設定 Proxy 驗證,則為 Null。 |
bool isProxyRequest | 如果此要求是取得 Proxy 驗證認證,則為 True。 如果實作對取得 Proxy 認證無效,則應該傳回 null。 |
bool isRetry | 如果先前要求此 URI 的認證,但提供的認證不允許授權存取,則為 True。 |
bool nonInteractive | 如果為 true,認證提供者必須隱藏所有使用者提示,並改用預設值。 |
CancellationToken cancellationToken | 應該檢查此取消令牌,以判斷要求認證的作業是否已取消。 |
傳回值:實作 介面的System.Net.ICredentials
認證物件。