分享方式:


使用 NuGet 認證提供者在 Visual Studio 中驗證摘要

NuGet Visual Studio 延伸模組 3.6+ 支持認證提供者,讓 NuGet 能夠使用已驗證的摘要。 安裝適用於 Visual Studio 的 NuGet 認證提供者之後,NuGet Visual Studio 延伸模組會視需要自動取得並重新整理已驗證摘要的認證。

您可以在 VsCredentialProvider 範例中找到範例實作。

在 Visual Studio 中,NuGet 會使用內部 VsCredentialProviderImporter ,其也會掃描外掛程式認證提供者。 這些外掛程式認證提供者必須可探索為類型的 IVsCredentialProviderMEF匯出。

從 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 具有內建和外掛程式認證提供者的清單。 系統會循序嘗試每個提供者,直到取得認證為止。

在認證取得期間,認證服務會依下列順序嘗試認證提供者,並在取得認證后立即停止:

  1. 系統會從 NuGet 組態檔擷取認證(使用內 SettingsCredentialProvider建的 )。
  2. 如果套件來源位於 Visual Studio Team Services 上, VisualStudioAccountProvider 將會使用 。
  3. 所有其他外掛程式 Visual Studio 認證提供者都會循序嘗試。
  4. 嘗試循序使用所有 NuGet 跨平台認證提供者。
  5. 如果尚未取得認證,系統會使用標準基本身份驗證對話框提示使用者輸入認證。

實作 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 認證提供者都必須:

  1. 在起始認證擷取之前,判斷它是否可以提供目標 URI 的認證。 如果提供者無法提供目標來源的認證,則它應該會傳回 null
  2. 如果提供者確實處理目標 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認證物件。