Udostępnij za pomocą


Wtyczka uwierzytelniania międzyplatformowego NuGet

W wersji 4.8 lub nowszej wszystkie klienci NuGet (NuGet.exe, Visual Studio, dotnet.exe i MSBuild.exe) mogą używać wtyczki uwierzytelniania utworzonej na podstawie modelu wtyczek międzyplatformowych NuGet .

Uwierzytelnianie w dotnet.exe

Program Visual Studio i NuGet.exe są domyślnie interaktywne. NuGet.exe zawiera przełącznik, aby uczynić go nieinterakcyjnym. Ponadto wtyczki NuGet.exe i Visual Studio monituje użytkownika o podanie danych wejściowych. W dotnet.exe nie ma monitu, a wartość domyślna nie jest interaktywna.

Mechanizm uwierzytelniania w dotnet.exe to przepływ urządzeń. Gdy operacja przywracania lub dodawania pakietu jest uruchamiana interaktywnie, bloki operacji i instrukcje dla użytkownika dotyczące sposobu ukończenia uwierzytelniania będą udostępniane w wierszu polecenia. Gdy użytkownik ukończy uwierzytelnianie, operacja będzie kontynuowana.

Aby działanie było interaktywne, należy przekazać element --interactive. Obecnie tylko jawne polecenia dotnet restore i dotnet add package wspierają przełącznik interaktywny. Nie ma przełącznika interakcyjnego dotnet build i dotnet publish.

Uwierzytelnianie w programie MSBuild

Podobnie jak dotnet.exe, MSBuild.exe działa domyślnie w trybie nieinteraktywnym. Mechanizm uwierzytelniania MSBuild.exe to przepływ urządzeniowy. Aby zezwolić na wstrzymanie przywracania i oczekiwanie na uwierzytelnienie, wywołaj funkcję przywracania za pomocą polecenia msbuild -t:restore -p:NuGetInteractive="true".

Tworzenie wtyczki uwierzytelniania międzyplatformowego

Przykładową implementację można znaleźć w wtyczce dostawcy poświadczeń firmy Microsoft.

Bardzo ważne jest, aby wtyczki były zgodne z wymaganiami dotyczącymi zabezpieczeń określonymi przez narzędzia klienckie NuGet. Minimalna wymagana wersja wtyczki jako wtyczka uwierzytelniania to 2.0.0. Narzędzie NuGet wykona negocjację z wtyczką i wykona zapytanie dotyczące obsługiwanych żądań operacji. Aby uzyskać więcej informacji na temat określonych komunikatów, zapoznaj się z komunikatami protokołu wtyczki międzyplatformowych NuGet.

NuGet ustawi poziom logowania i przekaże informacje o serwerze proxy do wtyczki, jeśli dotyczy. Rejestrowanie w konsoli NuGet jest dopuszczalne tylko po tym, jak NuGet ustawi poziom dziennika dla wtyczki.

  • Zachowanie uwierzytelniania wtyczki .NET Framework

W ramach .NET Framework wtyczki mogą powiadamiać użytkownika o dane wejściowe w formie okna dialogowego.

  • Zachowanie uwierzytelniania wtyczki .NET Core

W programie .NET Core nie można wyświetlić okna dialogowego. Wtyczki powinny używać przepływu urządzenia do uwierzytelniania. Wtyczka może wysyłać komunikaty dziennika do narzędzia NuGet z instrukcjami dla użytkownika. Pamiętaj, że logowanie jest dostępne po ustawieniu poziomu dziennika we wtyczce. Narzędzie NuGet nie będzie pobierać żadnych interakcyjnych danych wejściowych z wiersza polecenia.

Gdy klient wywołuje funkcję wtyczki dotyczącą pobierania poświadczeń uwierzytelniania, wtyczki muszą być zgodne z trybem interaktywności i respektować ustawienia okna dialogowego.

W poniższej tabeli podsumowano, jak wtyczka powinna zachowywać się dla wszystkich kombinacji.

IsNonInteractive CanShowDialog Zachowanie wtyczki
true true Przełącznik IsNonInteractive ma pierwszeństwo przed przełącznikiem okna dialogowego. Wtyczka nie może blokować.
true false Przełącznik IsNonInteractive ma pierwszeństwo przed przełącznikiem okna dialogowego. Wtyczka nie może blokować.
false true Wtyczka może wyświetlić okno dialogowe, jeśli jest to wymagane. Na przykład wybór logowania interakcyjnego lub konta.
false false Wtyczka powinna/nie może wyświetlić okna dialogowego. Wtyczka powinna używać przepływu urządzeń do uwierzytelniania, rejestrując wiadomość instrukcyjną przez rejestrator.

Przed NuGet 7.0, NuGet zawsze ustawiał CanShowDialog na false w interfejsie wiersza polecenia dotnet, a na true dla przywracania MSBuild. W wersji 7.0 NuGet zawsze będzie ustawiał CanShowDialog na prawda, ale wtyczki powinny nadal wykrywać, gdy graficzne interfejsy użytkownika nie są dostępne. Na przykład w przypadku uruchamiania w systemie Linux za pośrednictwem połączenia SSH bez przekazywania X lub sesji zdalnej programu PowerShell.

Przed napisaniem wtyczki zapoznaj się z następującymi specyfikacjami.