Uwierzytelnianie źródeł danych przy użyciu dostawców poświadczeń nuget.exe

Dodano obsługę wersji 3.3 dla nuget.exe określonych dostawców poświadczeń (wersja 1). Od tego czasu dodano obsługę wersji 4.8 dla dostawców poświadczeń (v2), którzy pracują we wszystkich scenariuszach wiersza polecenia (nuget.exe, dotnet.exe, msbuild.exe).

Aby uzyskać więcej informacji na temat wszystkich podejść uwierzytelniania, zobacz Korzystanie z pakietów z uwierzytelnionych źródeł danych .

odnajdywanie dostawcy poświadczeń nuget.exe

nuget.exe dostawców poświadczeń można używać na 3 sposoby:

  • Globalnie: aby udostępnić dostawcę poświadczeń wszystkim wystąpieniom uruchamiania w profilu bieżącego nuget.exe użytkownika, dodaj go do %LocalAppData%\NuGet\CredentialProviderselementu . Może być konieczne utworzenie CredentialProviders folderu. Dostawcy poświadczeń można zainstalować w katalogu głównym CredentialProviders folderu lub w podfolderze. Jeśli dostawca poświadczeń ma wiele plików/zestawów, możesz użyć podfolderów, aby zapewnić organizowanie dostawców.

  • Ze zmiennej środowiskowej: dostawcy poświadczeń mogą być przechowywani w dowolnym miejscu i udostępniane nuget.exe przez ustawienie %NUGET_CREDENTIALPROVIDERS_PATH% zmiennej środowiskowej na lokalizację dostawcy. Ta zmienna może być listą rozdzieloną średnikami (na przykład path1;path2), jeśli masz wiele lokalizacji.

  • Obok nuget.exe: dostawcy poświadczeń nuget.exe można umieścić w tym samym folderze co nuget.exe.

Podczas ładowania dostawców nuget.exe poświadczeń przeszukuje powyższe lokalizacje w kolejności dla dowolnego pliku o nazwie credentialprovider*.exe, a następnie ładuje te pliki w kolejności ich znalezienia. Jeśli w tym samym folderze istnieje wiele dostawców poświadczeń, są one ładowane w kolejności alfabetycznej.

Tworzenie dostawcy poświadczeń nuget.exe

Dostawca poświadczeń jest plikiem wykonywalnym wiersza polecenia o nazwie w formularzu CredentialProvider*.exe, który zbiera dane wejściowe, uzyskuje poświadczenia zgodnie z potrzebami, a następnie zwraca odpowiedni kod stanu zakończenia i standardowe dane wyjściowe.

Dostawca musi wykonać następujące czynności:

  • Ustal, czy może podać poświadczenia dla docelowego identyfikatora URI przed zainicjowanym pozyskiwaniem poświadczeń. Jeśli nie, powinien zwrócić kod stanu 1 bez poświadczeń.
  • Nie można modyfikować NuGet.Config (na przykład ustawiać tam poświadczenia).
  • Obsługa konfiguracji serwera proxy HTTP samodzielnie, ponieważ pakiet NuGet nie dostarcza informacji o serwerze proxy do wtyczki.
  • Zwracaj poświadczenia lub szczegóły błędu, nuget.exe zapisując obiekt odpowiedzi JSON (patrz poniżej) na stdout przy użyciu kodowania UTF-8.
  • Opcjonalnie emituj dodatkowe rejestrowanie śledzenia do narzędzia stderr. Żadne wpisy tajne nigdy nie powinny być zapisywane w stderr, ponieważ na poziomach szczegółowości "normalne" lub "szczegółowe" takie ślady są echo przez NuGet do konsoli.
  • Nieoczekiwane parametry powinny być ignorowane, zapewniając zgodność z przyszłymi wersjami narzędzia NuGet.

Parametry wejściowe

Parametr/przełącznik opis
Identyfikator URI {value} Identyfikator URI źródła pakietu wymagający poświadczeń.
Nieinteraktywnych Jeśli jest obecny, dostawca nie wystawia interakcyjnych monitów.
IsRetry Jeśli jest obecny, wskazuje, że ta próba jest ponowieniem wcześniej nieudanej próby. Dostawcy zazwyczaj używają tej flagi, aby upewnić się, że pomijają istniejącą pamięć podręczną i monitują o podanie nowych poświadczeń, jeśli to możliwe.
Czasownik {value} Jeśli są obecne, jedna z następujących wartości: "normalna", "cicha" lub "szczegółowa". Jeśli żadna wartość nie jest podana, wartość domyślna to "normal". Dostawcy powinni użyć tego jako wskazania poziomu opcjonalnego rejestrowania w celu emisji do standardowego strumienia błędów.

Kody zakończenia

Kod Result opis
0 Powodzenie Poświadczenia zostały pomyślnie uzyskane i zostały zapisane w pliku stdout.
1 ProviderNotApplicable Bieżący dostawca nie udostępnia poświadczeń dla danego identyfikatora URI.
2 Błąd Dostawca jest prawidłowym dostawcą dla danego identyfikatora URI, ale nie może podać poświadczeń. W takim przypadku nuget.exe nie ponawia próby uwierzytelnienia i zakończy się niepowodzeniem. Typowym przykładem jest anulowanie logowania interakcyjnego przez użytkownika.

Wyjście standardowe

Właściwości Uwagi
Username Nazwa użytkownika dla uwierzytelnionych żądań.
Hasło Hasło do uwierzytelnionych żądań.
Komunikat Opcjonalne szczegóły dotyczące odpowiedzi, używane tylko do wyświetlania dodatkowych szczegółów w przypadkach awarii.

Przykładowy limit czasu:

{ "Username" : "freddy@example.com",
    "Password" : "bwm3bcx6txhprzmxhl2x63mdsul6grctazoomtdb6kfbof7m3a3z",
    "Message"  : "" }

Rozwiązywanie problemów z dostawcą poświadczeń

Obecnie narzędzie NuGet nie zapewnia bardzo bezpośredniej obsługi debugowania niestandardowych dostawców poświadczeń; problem 4598 śledzi tę pracę.

Możesz również wykonać następujące czynności:

  • Uruchom nuget.exe z przełącznikiem, -verbosity aby sprawdzić szczegółowe dane wyjściowe.

  • Dodaj komunikaty debugowania do stdout odpowiednich miejsc.

  • Upewnij się, że używasz nuget.exe 3.3 lub nowszej.

  • Dołącz debuger podczas uruchamiania przy użyciu tego fragmentu kodu:

    while (!Debugger.IsAttached)
    {
        System.Threading.Thread.Sleep(100);
    }
    Debugger.Break();