Bagikan melalui


Plugin autentikasi lintas platform NuGet

Di versi 4.8+, semua klien NuGet (NuGet.exe, Visual Studio, dotnet.exe dan MSBuild.exe) dapat menggunakan plugin autentikasi yang dibangun di atas model plugin lintas platform NuGet .

Autentikasi dalam dotnet.exe

Visual Studio dan NuGet.exe secara default interaktif. NuGet.exe berisi sakelar untuk membuatnya tidak interaktif. Selain itu plugin NuGet.exe dan Visual Studio meminta input kepada pengguna. Dalam dotnet.exe tidak ada permintaan dan defaultnya tidak interaktif.

Mekanisme autentikasi di dotnet.exe adalah device flow. Ketika operasi memulihkan atau menambahkan paket dijalankan secara interaktif, operasi akan berhenti sementara dan instruksi kepada pengguna tentang cara menyelesaikan autentikasi akan disediakan pada baris perintah. Ketika pengguna menyelesaikan autentikasi, operasi akan berlanjut.

Untuk membuat operasi interaktif, seseorang harus melewati --interactive. Saat ini hanya perintah dotnet restore dan dotnet add package yang eksplisit yang mendukung pengalih interaktif. Tidak ada pengalih interaktif pada dotnet build dan dotnet publish.

Autentikasi di MSBuild

"Mirip dengan dotnet.exe, MSBuild.exe secara default bersifat non-interaktif dan mekanisme autentikasi MSBuild.exe adalah aliran perangkat." Untuk mengizinkan pemulihan dijeda dan menunggu autentikasi, panggil pemulihan dengan msbuild -t:restore -p:NuGetInteractive="true".

Membuat plugin autentikasi lintas platform

Implementasi sampel dapat ditemukan di plugin Penyedia Kredensial Microsoft.

Sangat penting bahwa plugin sesuai dengan persyaratan keamanan yang ditetapkan oleh alat klien NuGet. Versi minimum yang diperlukan untuk plugin menjadi plugin autentikasi adalah 2.0.0. NuGet akan melakukan jabat tangan dengan plugin dan kueri untuk klaim operasi yang didukung. Silakan merujuk ke pesan protokol plugin lintas platform NuGet untuk detail selengkapnya tentang pesan tertentu.

NuGet akan mengatur tingkat log dan memberikan informasi proksi ke plugin jika berlaku. Pengelogan ke konsol NuGet hanya dapat diterima setelah NuGet mengatur tingkat log ke plugin.

  • Perilaku autentikasi .NET Framework plugin

Dalam .NET Framework, plugin diizinkan untuk meminta input kepada pengguna, dalam bentuk dialog.

  • Perilaku autentikasi plugin .NET Core

Di .NET Core, dialog tidak dapat ditampilkan. Plugin harus menggunakan alur perangkat untuk mengautentikasi. Plugin dapat mengirim pesan log ke NuGet dengan instruksi kepada pengguna. Perhatikan bahwa pengelogan tersedia setelah tingkat log diatur ke plugin. NuGet tidak akan mengambil input interaktif dari baris perintah.

Ketika klien memanggil plug-in dengan permintaan Kredensial Autentikasi, plug-in harus mematuhi sakelar interaktivitas dan menghormati sakelar dialog.

Tabel berikut ini meringkas bagaimana plugin harus berprilaku untuk semua kombinasi.

IsNonInteractive DapatMenampilkanDialog Perilaku plugin
true true Sakelar IsNonInteractive lebih diprioritaskan daripada sakelar dialog. Plugin tidak diizinkan untuk memblokir.
true false Sakelar IsNonInteractive lebih diprioritaskan daripada sakelar dialog. Plugin tidak diizinkan untuk memblokir.
false true Plugin dapat menampilkan dialog jika diperlukan. Misalnya, login interaktif, atau pemilihan akun.
false false Plugin tidak boleh/tidak dapat menampilkan dialog. Plugin harus menggunakan alur perangkat untuk mengautentikasi dengan mencatat pesan instruksi melalui pencatat.

Sebelum NuGet 7.0, NuGet selalu mengatur CanShowDialog ke false pada dotnet CLI, dan true untuk pemulihan MSBuild. Mulai dari versi 7.0, NuGet akan selalu mengatur CanShowDialog ke true, namun, plugin masih harus mendeteksi kapan antarmuka grafis tidak tersedia. Misalnya saat berjalan di Linux melalui koneksi SSH tanpa penerusan X, atau sesi jarak jauh PowerShell.

Silakan lihat spesifikasi berikut sebelum menulis plugin.