Baca dalam bahasa Inggris

Bagikan melalui


Mengautentikasi umpan di Visual Studio dengan penyedia kredensial NuGet

Ekstensi NuGet Visual Studio 3.6+ mendukung penyedia kredensial, yang memungkinkan NuGet untuk bekerja dengan umpan terautentikasi. Setelah Anda menginstal penyedia kredensial NuGet untuk Visual Studio, ekstensi NuGet Visual Studio akan secara otomatis memperoleh dan menyegarkan kredensial untuk umpan yang diautentikasi seperlunya.

Contoh implementasi dapat ditemukan di contoh VsCredentialProvider.

Dalam Visual Studio, NuGet menggunakan VsCredentialProviderImporter internal yang juga memindai penyedia kredensial untuk plug-in. Penyedia kredensial plug-in ini harus dapat ditemukan sebagai Eksport MEF tipe IVsCredentialProvider.

Dimulai dengan 4.8+ NuGet di Visual Studio juga mendukung plugin autentikasi lintas platform baru, tetapi mereka bukan pendekatan yang direkomendasikan karena alasan performa.

Catatan

Penyedia kredensial NuGet untuk Visual Studio harus diinstal sebagai ekstensi Visual Studio biasa dan akan memerlukan Visual Studio 2017 atau lebih tinggi.

Penyedia kredensial NuGet untuk Visual Studio hanya berfungsi di Visual Studio (bukan dalam dotnet restore atau nuget.exe). Untuk penyedia kredensial dengan nuget.exe, lihat Penyedia Kredensial nuget.exe. Untuk penyedia kredensial di dotnet dan msbuild, lihat plugin lintas platform NuGet

Membuat penyedia kredensial NuGet untuk Visual Studio

Ekstensi NuGet Visual Studio 3.6+ mengimplementasikan CredentialService internal yang digunakan untuk memperoleh kredensial. CredentialService memiliki daftar penyedia kredensial bawaan dan plug-in. Setiap penyedia dicoba secara berurutan sampai kredensial diperoleh.

Selama akuisisi kredensial, layanan kredensial akan mencoba penyedia kredensial dalam urutan berikut, berhenti segera setelah kredensial diperoleh:

  1. Kredensial akan diambil dari file konfigurasi NuGet (menggunakan SettingsCredentialProviderbawaan ).
  2. Penyedia kredensial Visual Studio akan dicoba secara berurutan.
  3. Cobalah untuk menggunakan semua penyedia kredensial lintas platform NuGet secara berurutan.
  4. Jika belum ada kredensial yang diperoleh, pengguna akan dimintai kredensial menggunakan dialog autentikasi dasar standar.

Menerapkan IVsCredentialProvider.GetCredentialsAsync

Untuk membuat penyedia kredensial NuGet untuk Visual Studio, buat Ekstensi Visual Studio yang mengekspos Ekspor MEF publik yang mengimplementasikan jenis IVsCredentialProvider, dan mematuhi prinsip yang diuraikan di bawah ini.

cs
public interface IVsCredentialProvider
{
    Task<ICredentials> GetCredentialsAsync(
        Uri uri,
        IWebProxy proxy,
        bool isProxyRequest,
        bool isRetry,
        bool nonInteractive,
        CancellationToken cancellationToken);
}

Implementasi sampel dapat ditemukan di sampel VsCredentialProvider.

Setiap penyedia kredensial NuGet untuk Visual Studio harus:

  1. Tentukan apakah dapat memberikan kredensial untuk URI yang ditargetkan sebelum memulai akuisisi kredensial. Jika penyedia tidak dapat memberikan kredensial untuk sumber yang ditargetkan, maka penyedia harus mengembalikan null.
  2. Jika penyedia menangani permintaan untuk URI yang ditargetkan, tetapi tidak dapat menyediakan kredensial, pengecualian harus dilemparkan.

Penyedia kredensial NuGet kustom untuk Visual Studio harus mengimplementasikan antarmuka IVsCredentialProvider yang tersedia di paket NuGet.VisualStudio .

GetCredentialAsync

Parameter Masukan Deskripsi
Uri uri Uri sumber paket yang diminta kredensialnya.
Proksi IWebProxy Proksi web yang akan digunakan saat berkomunikasi pada jaringan. Null jika tidak ada autentikasi proksi yang dikonfigurasi.
bool isProxyRequest Benar jika permintaan ini adalah untuk mendapatkan kredensial autentikasi proksi. Jika implementasi tidak valid untuk memperoleh kredensial proksi, maka null harus dikembalikan.
bool isRetry Benar jika kredensial sebelumnya diperlukan untuk Uri ini, tetapi kredensial yang disediakan tidak mengizinkan akses yang terotorisasi.
bool tidak interaktif Jika true, penyedia kredensial harus menekan semua permintaan pengguna dan menggunakan nilai default sebagai gantinya.
CancellationToken (Token Pembatalan) cancellationToken Token pembatalan ini harus diperiksa untuk menentukan apakah operasi yang meminta kredensial telah dibatalkan.

Mengembalikan nilai: Objek kredensial yang mengimplementasikan antarmuka System.Net.ICredentials.