Bagikan melalui


Mengkonsumsi paket dari umpan terautentikasi

Banyak operasi NuGet, seperti pemulihan dan penginstalan, memerlukan komunikasi dengan satu atau beberapa sumber paket, yang dapat dikonfigurasi dalam file nuget.config.

Catatan

Gunakan sumber paket yang Anda percayai.

Untuk umpan HTTP, NuGet akan membuat permintaan yang tidak diautentikasi, dan jika server merespons dengan respons HTTP 401, NuGet akan mencari kredensial dalam urutan berikut:

  1. Variabel NuGetPackageSourceCredentials_{name}lingkungan .
  2. Kredensial dalam file nuget.config.
  3. Gunakan penyedia kredensial NuGet, jika sumber paket Anda menyediakannya.

Kredensial yang perlu Anda gunakan ditentukan oleh sumber paket. Oleh karena itu, kecuali Anda menggunakan penyedia kredensial, Anda harus memeriksa dengan sumber paket Anda untuk informasi masuk apa yang akan digunakan. Sangat umum bagi sumber paket untuk melarang Anda menggunakan kata sandi Anda (bahwa Anda masuk ke situs web dengan) dengan NuGet. Biasanya Anda perlu membuat Token Akses Pribadi untuk digunakan sebagai kata sandi NuGet, tetapi Anda harus memeriksa dokumentasi untuk server NuGet yang Anda gunakan. Beberapa sumber paket, seperti Azure DevOps dan GitHub, memiliki token akses tercakup, sehingga Anda mungkin perlu memastikan bahwa token apa pun yang Anda buat menyertakan cakupan yang diperlukan.

Praktik terbaik keamanan untuk mengelola kredensial

Meskipun NuGet mencari kredensial dalam urutan yang disebutkan di atas, kami merekomendasikan urutan berikut untuk mengelola kredensial dengan aman saat mengautentikasi dengan umpan privat:

  1. Penyedia Kredensial: Sangat disarankan untuk menggunakan penyedia kredensial jika memungkinkan. Pendekatan ini menghindari penyimpanan rahasia dalam teks biasa dan meminimalkan risiko secara tidak sengaja mengekspos rahasia melalui kontrol sumber. Selain itu, umumnya mengurangi jumlah tempat yang perlu Anda perbarui ketika kredensial kedaluwarsa atau berubah. Jika penyedia kredensial mendukung akses menyeluruh, itu dapat mengurangi frekuensi masuk atau jumlah tempat di mana kredensial perlu disimpan. Lihat bagian penyedia kredensial untuk informasi selengkapnya.

  2. Kredensial Terenkripsi di nuget.config: Jika penyedia kredensial tidak tersedia, Anda harus mempertimbangkan untuk menggunakan kredensial terenkripsi. Pendekatan ini menyediakan lapisan keamanan tambahan dengan menyimpan kredensial dalam format terenkripsi. Untuk informasi selengkapnya, lihat bagian tentang kredensial dalam file nuget.config.

    Catatan

    Ketahuilah bahwa kata sandi terenkripsi hanya didukung di Windows. Selain itu, mereka hanya dapat didekripsi pada komputer yang sama dan oleh pengguna yang sama yang awalnya mengenkripsinya.

  3. Menggunakan Makro Variabel Lingkungan di nuget.config: Jika menggunakan kredensial terenkripsi tidak dimungkinkan, pertimbangkan untuk menyimpan kredensial dalam file nuget.config dengan makro variabel lingkungan. Pendekatan ini memungkinkan Anda mereferensikan variabel lingkungan yang berisi kredensial aktual. Ini meningkatkan transparansi dan membantu pengguna akhir memahami bagaimana kredensial mereka dikonfigurasi. Untuk informasi selengkapnya, lihat bagian tentang kredensial dalam file nuget.config.

  4. Menggunakan Variabel Lingkungan Secara Langsung: Sebagai opsi fallback, Anda dapat menyimpan kredensial langsung dalam variabel lingkungan. Namun, perlu diketahui bahwa pendekatan ini mungkin menawarkan lebih sedikit visibilitas dan kontrol dibandingkan dengan menggunakan makro variabel lingkungan dalam file nuget.config . Untuk informasi selengkapnya, lihat bagian tentang kredensial dalam variabel lingkungan.

  5. Hapus Kredensial Teks di NuGet.Config: Sangat disarankan untuk menggunakan salah satu opsi yang disebutkan sebelumnya. Jika opsi ini tidak layak, Anda dapat menyimpan kredensial dalam file nuget.config . Namun, opsi ini hanya boleh digunakan di lingkungan di mana tidak ada opsi aman lainnya yang tersedia. Untuk informasi selengkapnya, lihat bagian tentang kredensial dalam file nuget.config.

    Peringatan

    Menyimpan kredensial dalam teks yang jelas dalam file nuget.config , terutama ketika menyimpan file dalam kontrol sumber, berisiko karena meningkatkan kemungkinan kebocoran kredensial yang tidak disengaja. Jika Anda harus menyimpan kredensial dalam file nuget.config , pertimbangkan untuk menggunakan salah satu opsi yang lebih aman yang disebutkan di atas.

Dengan mematuhi praktik terbaik ini, Anda dapat mengautentikasi umpan privat dengan aman sambil meminimalkan risiko paparan informasi sensitif.

Kredensial dalam variabel lingkungan

NuGet akan mencari variabel lingkungan bernama NuGetPackageSourceCredentials_{name}, di mana {name} adalah nilai key="name" dalam sumber paket file nuget.config Anda. Nilai variabel lingkungan harus Username={username};Password={password}, dan dapat secara opsional menyertakan ;ValidAuthenticationTypes={types}. Jika variabel lingkungan tidak cocok dengan konvensi NuGet, atau nilai tidak memenuhi pola nuget yang diharapkan, NuGet akan secara diam-diam mengabaikan variabel lingkungan, dan terus mencari kredensial untuk sumber paket di tempat lain. Tidak ada log untuk memberi sinyal bahwa NuGet menggunakan kredensial dari variabel lingkungan, yang dapat menyebabkan kesulitan dalam men-debug masalah autentikasi jika variabel lingkungan berisi rahasia yang kedaluwarsa, dan rahasia baru ditambahkan ke file nuget.config , karena file konfigurasi memiliki prioritas yang lebih rendah.

Tip

Menggunakan variabel lingkungan dalam alur CI/CD adalah pilihan yang sangat baik untuk meminimalkan risiko rahasia yang ditangkap dalam log.

Misalnya, pertimbangkan file nuget.config berikut:

<configuration>
  <packageSources>
    <clear />
    <add key="Contoso" value="https://nuget.contoso.com/v3/index.json" />
  </packageSources>
</configuration>

Dalam hal ini, nama sumber adalah Contoso dan NuGet akan mencari nama NuGetPackageSourceCredentials_Contosovariabel lingkungan . Beberapa platform peka huruf besar/kecil, jadi berhati-hatilah menggunakan karakter huruf besar dan kecil yang benar untuk nama lingkungan dan nama sumber, seperti yang didefinisikan dalam file nuget.config Anda.

Jika nama pengguna adalah nugetUser dan kata sandinya adalah secret123, nilai variabel lingkungan harus diatur ke Username=nugetUser;Password=secret123. Jika NuGet hanya boleh menggunakan kredensial ini untuk autentikasi HTTP Basic, tetapi bukan skema autentikasi lainnya, Anda dapat mengatur nilai variabel lingkungan ke Username=nugetUser;Password=secret123;ValidAuthenticationTypes=Basic. Untuk informasi selengkapnya tentang jenis autentikasi yang valid, lihat dokumen pada kredensial paket dalam file nuget.config.

Catatan

Variabel lingkungan memiliki batasan pada karakter yang diizinkan, dan sistem operasi yang berbeda mungkin memiliki batasan yang berbeda. Misalnya, spasi tidak diizinkan. Oleh karena itu, Anda menggunakan fitur variabel lingkungan ini untuk menentukan kredensial NuGet untuk sumber paket yang menggunakan karakter apa pun yang tidak valid untuk variabel lingkungan platform Anda. Dalam kasus seperti itu, Anda harus mengganti nama sumber paket dalam file nuget.config Anda.

Kredensial dalam file nuget.config

file nuget.config dapat berisi kredensial sumber paket. Lihat bagian dokumen referensi file nuget.config pada kredensial sumber paket untuk informasi selengkapnya, termasuk sintaksis. Namun, lebih mudah digunakan dotnet nuget update source pada baris perintah untuk mengatur kredensial.

Peringatan

Berhati-hatilah saat mengatur kredensial dalam file nuget.config , terutama saat menyimpan kredensial sebagai teks biasa. Jika kredensial ditulis ke file nuget.config yang berada dalam kontrol sumber, ada peningkatan risiko kebocoran rahasia secara tidak sengaja.

Karena NuGet mengakumulasi pengaturan dari beberapa file, disarankan untuk menyimpan kredensial ke file nuget.config pengguna Anda. Kami juga menyarankan untuk menyimpan sumber paket dalam solusi (repositori kode sumber) file nuget.config , termasuk <clear /> elemen, untuk keandalan build.

Nama pengguna dan kata sandi teks biasa dalam file nuget.config dapat menggunakan variabel lingkungan dengan menambahkan % ke awal dan akhir nama variabel lingkungan yang ingin Anda gunakan. Untuk informasi selengkapnya, lihat dokumen referensi nuget.config tentang menggunakan variabel lingkungan.

Penyedia kredensial

NuGet memiliki model ekstensibilitas, memungkinkan plugin untuk memberikan kredensial NuGet. Jalur yang harus diinstal oleh penyedia kredensial, agar NuGet menemukan, berbeda untuk .NET Framework (NuGet.exe, MSBuild, dan Visual Studio), dan .NET SDK (berjalan pada runtime .NET 5+).

NuGet memiliki konsep dijalankan dalam mode interaktif atau mode non-interaktif. Saat dalam mode non-interaktif, penyedia kredensial diminta untuk tidak memblokir NuGet. Saat dalam mode interaktif, penyedia kredensial dapat meminta Anda untuk masuk. Alat yang berbeda memiliki default yang berbeda, sehingga mode interaktif mungkin perlu ikut serta atau menolak, tergantung pada skenario Anda.

Alat Default Pengalih
dotnet CLI non-interaktif --interactive Argumen. Contohnya,dotnet restore --interactive.
MSBuild non-interaktif NuGetInteractive Properti MSBuild. Contohnya,msbuild -t:restore -p:NuGetInteractive=true.
NuGet.exe interactive -NonInteractive Argumen. Contohnya,nuget.exe restore -NonInteractive.
Visual Studio interactive tidak dimungkinkan untuk berjalan dalam mode non-interaktif.

NuGet.exe mendukung penyedia kredensial V1 dan V2, sementara MSBuild dan .NET SDK hanya mendukung plugin lintas platform (V2).

Di Visual Studio, NuGet memiliki antarmuka Penyedia Kredensial Visual Studio, penyedia info masuk mana yang dapat digunakan untuk memberikan pengalaman masuk grafis, atau memanggil VISUAL Studio API jika perlu. NuGet di Visual Studio akan kembali ke penyedia kredensial baris perintah jika tidak dapat menemukan penyedia kredensial Visual Studio yang menangani sumber.

Visual Studio 2017 versi 15.9, dan yang lebih baru, mencakup penyedia kredensial untuk Azure Artifacts, yang berfungsi dalam Visual Studio, MSBuild, dan NuGet.exe. Namun, penyedia kredensial untuk .NET SDK tidak disertakan oleh Visual Studio, jadi harus diinstal secara terpisah untuk bekerja dengan dotnet CLI.

Daftar penyedia kredensial

Ada permintaan fitur untuk membuat penyedia kredensial dapat diinstal melalui alat .NET, dan ini kemungkinan akan memudahkan untuk menemukan penyedia kredensial lainnya. Sampai ini diterapkan, berikut adalah daftar penyedia info masuk yang kami ketahui: