Korzystanie z pakietów z uwierzytelnionych źródeł danych

Wiele operacji NuGet, takich jak przywracanie i instalowanie, wymaga komunikacji z co najmniej jednym źródłem pakietów, które można skonfigurować w plikach nuget.config.

Uwaga

Użyj zaufanych źródeł pakietów.

W przypadku kanałów informacyjnych HTTP narzędzie NuGet utworzy nieuwierzytelnione żądanie, a jeśli serwer odpowie przy użyciu odpowiedzi HTTP 401, narzędzie NuGet wyszuka poświadczenia w następującej kolejności:

  1. Zmienna środowiskowa NuGetPackageSourceCredentials_{name}.
  2. Poświadczenia w plikach nuget.config.
  3. Użyj dostawcy poświadczeń NuGet, jeśli źródło pakietu go udostępnia.

Poświadczenia, których chcesz użyć, są określane przez źródło pakietu. W związku z tym, chyba że używasz dostawcy poświadczeń, należy sprawdzić źródło pakietu pod kątem poświadczeń do użycia. Źródła pakietów bardzo często zabraniają używania hasła (logowania się do witryny internetowej) za pomocą narzędzia NuGet. Zazwyczaj należy utworzyć osobisty token dostępu do użycia jako hasło NuGet, ale należy sprawdzić dokumentację używanego serwera NuGet. Niektóre źródła pakietów, takie jak Azure DevOps i GitHub, mają tokeny dostępu w zakresie, dlatego może być konieczne upewnienie się, że wszystkie utworzone tokeny obejmują wymagany zakres.

Najlepsze rozwiązania w zakresie zabezpieczeń dotyczące zarządzania poświadczeniami

Mimo że program NuGet wyszukuje poświadczenia w podanej powyżej kolejności, zalecamy następującą sekwencję bezpiecznego zarządzania poświadczeniami podczas uwierzytelniania przy użyciu kanałów informacyjnych prywatnych:

  1. Dostawca poświadczeń: zdecydowanie zaleca się używanie dostawcy poświadczeń zawsze, gdy jest to możliwe. Takie podejście pozwala uniknąć przechowywania wpisów tajnych w postaci zwykłego tekstu i minimalizuje ryzyko przypadkowego ujawnienia wpisów tajnych za pośrednictwem kontroli źródła. Ponadto ogólnie zmniejsza liczbę miejsc, które należy zaktualizować po wygaśnięciu lub zmianie poświadczeń. Jeśli dostawca poświadczeń obsługuje logowanie jednokrotne, może zmniejszyć częstotliwość logowania lub liczbę miejsc, w których należy zapisać poświadczenia. Aby uzyskać więcej informacji, zapoznaj się z sekcją dostawcy poświadczeń.

  2. Zaszyfrowane poświadczenia w pliku nuget.config: jeśli dostawca poświadczeń jest niedostępny, należy rozważyć użycie zaszyfrowanych poświadczeń. Takie podejście zapewnia dodatkową warstwę zabezpieczeń, przechowując poświadczenia w formacie zaszyfrowanym. Aby uzyskać więcej informacji, zapoznaj się z sekcją dotyczącą poświadczeń w plikach nuget.config.

    Uwaga

    Należy pamiętać, że zaszyfrowane hasła są obsługiwane tylko w systemie Windows. Ponadto można je odszyfrować tylko na tej samej maszynie i przez tego samego użytkownika, który pierwotnie je zaszyfrował.

  3. Używanie makr zmiennych środowiskowych w pliku nuget.config: jeśli użycie zaszyfrowanych poświadczeń nie jest możliwe, rozważ zapisanie poświadczeń w pliku nuget.config z makrami zmiennych środowiskowych. Takie podejście umożliwia odwoływania się do zmiennych środowiskowych, które zawierają rzeczywiste poświadczenia. Zwiększa przejrzystość i pomaga użytkownikom końcowym zrozumieć, jak skonfigurowano ich poświadczenia. Aby uzyskać więcej informacji, zapoznaj się z sekcją dotyczącą poświadczeń w plikach nuget.config.

  4. Używanie zmiennych środowiskowych bezpośrednio: jako opcja rezerwowa można przechowywać poświadczenia bezpośrednio w zmiennych środowiskowych. Należy jednak pamiętać, że takie podejście może oferować mniejszą widoczność i kontrolę w porównaniu z użyciem makr zmiennych środowiskowych w pliku nuget.config . Aby uzyskać więcej informacji, zapoznaj się z sekcją dotyczącą poświadczeń w zmiennych środowiskowych.

  5. Wyczyść poświadczenia tekstowe w pliku NuGet.Config: zdecydowanie zaleca się użycie jednej z wcześniej wymienionych opcji. Jeśli te opcje nie są możliwe, możesz przechowywać poświadczenia w pliku nuget.config . Jednak ta opcja powinna być używana tylko w środowiskach, w których nie jest dostępna żadna inna bezpieczna opcja. Aby uzyskać więcej informacji, zapoznaj się z sekcją dotyczącą poświadczeń w plikach nuget.config.

    Ostrzeżenie

    Przechowywanie poświadczeń w postaci zwykłego tekstu w pliku nuget.config , zwłaszcza podczas zapisywania pliku w kontroli źródła, jest ryzykowne, ponieważ zwiększa prawdopodobieństwo przypadkowego wycieku poświadczeń. Jeśli musisz przechowywać poświadczenia w pliku nuget.config , rozważ użycie jednej z bardziej bezpiecznych opcji wymienionych powyżej.

Stosując się do tych najlepszych rozwiązań, można bezpiecznie uwierzytelniać prywatne źródła danych przy jednoczesnym zminimalizowaniu ryzyka ujawnienia poufnych informacji.

Poświadczenia w zmiennych środowiskowych

Narzędzie NuGet wyszuka zmienną środowiskową o nazwie NuGetPackageSourceCredentials_{name}, gdzie {name} jest wartością key="name" w źródle pakietu pliku nuget.config . Wartość zmiennej środowiskowej musi mieć Username={username};Password={password}wartość i może opcjonalnie zawierać ;ValidAuthenticationTypes={types}wartość . Jeśli zmienna środowiskowa nie jest zgodna z konwencją NuGet lub wartość nie spełnia oczekiwanego wzorca NuGet, program NuGet dyskretnie zignoruje zmienną środowiskową i nadal wyszukuje poświadczenia dla źródła pakietu w innym miejscu. Nie ma dzienników sygnalizujących, że program NuGet używa poświadczeń ze zmiennej środowiskowej, co może powodować trudności z debugowaniem problemów z uwierzytelnianiem, jeśli zmienna środowiskowa zawiera wygasły wpis tajny, a nowy wpis tajny jest dodawany do pliku nuget.config , ponieważ plik konfiguracji ma niższy priorytet.

Napiwek

Użycie zmiennych środowiskowych w potokach ciągłej integracji/ciągłego wdrażania jest doskonałym wyborem, aby zminimalizować ryzyko przechwycenia wpisów tajnych w dziennikach.

Rozważmy na przykład następujący plik nuget.config :

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

W takim przypadku nazwa źródła to Contoso , a NuGet wyszuka nazwę NuGetPackageSourceCredentials_Contosozmiennej środowiskowej . W niektórych platformach jest rozróżniana wielkość liter, dlatego należy dbać o używanie poprawnych wyższej i małej litery dla nazwy środowiska i nazwy źródłowej, zgodnie z definicją w pliku nuget.config .

Jeśli nazwa użytkownika to nugetUser i hasło to secret123, wartość zmiennej środowiskowej powinna być ustawiona na Username=nugetUser;Password=secret123. Jeśli pakiet NuGet powinien używać tego poświadczenia tylko do uwierzytelniania podstawowego HTTP, ale nie innych schematów uwierzytelniania, możesz ustawić wartość zmiennej środowiskowej na Username=nugetUser;Password=secret123;ValidAuthenticationTypes=Basic. Aby uzyskać więcej informacji na temat prawidłowych typów uwierzytelniania, zobacz dokumentację dotyczącą poświadczeń pakietu w plikach nuget.config.

Uwaga

Zmienne środowiskowe mają ograniczenia dotyczące dozwolonych znaków, a różne systemy operacyjne mogą mieć różne ograniczenia. Na przykład spacje nie są dozwolone. W związku z tym ta funkcja zmiennej środowiskowej służy do określania poświadczeń NuGet dla źródeł pakietów, które używają wszelkich znaków, które są nieprawidłowe dla zmiennych środowiskowych platformy. W takich przypadkach należy zmienić nazwę źródła pakietu w pliku nuget.config .

Poświadczenia w plikach nuget.config

Pliki nuget.config mogą zawierać poświadczenia źródła pakietu. Aby uzyskać więcej informacji, w tym składni, zobacz sekcję dokumentacji referencyjnej pliku nuget.config dotyczącą poświadczeń źródłowych pakietu. Jednak łatwiej jest użyć dotnet nuget update source w wierszu polecenia, aby ustawić poświadczenia.

Ostrzeżenie

Podczas ustawiania poświadczeń w plikach nuget.config należy zachować ostrożność, zwłaszcza podczas zapisywania poświadczeń jako zwykłego tekstu. Jeśli poświadczenie jest zapisywane w pliku nuget.config , który znajduje się w kontroli źródła, istnieje zwiększone ryzyko przypadkowego wycieku wpisu tajnego.

Ponieważ pakiet NuGet gromadzi ustawienia z wielu plików, zaleca się zapisanie poświadczeń w pliku nuget.config użytkownika. Zalecamy również zapisanie źródeł pakietów w rozwiązaniu (repozytorium kodu źródłowego<clear />) pliku nuget.config, w tym elementu, w celu zwiększenia niezawodności kompilacji.

Nazwa użytkownika i hasło w postaci zwykłego tekstu w pliku nuget.config mogą używać zmiennej środowiskowej przez dodanie % do początku i końca nazwy zmiennej środowiskowej, której chcesz użyć. Aby uzyskać więcej informacji, zobacz dokumentację referencyjną narzędzia nuget.config dotyczącą używania zmiennych środowiskowych.

Dostawcy poświadczeń

Pakiet NuGet ma model rozszerzalności, który umożliwia wtyczkom dostarczanie poświadczeń NuGet. Ścieżka , którą muszą zainstalować dostawcy poświadczeń, aby program NuGet mógł odnaleźć, różni się od programu .NET Framework (NuGet.exe, MSBuild i Visual Studio) oraz zestawu .NET SDK (uruchomionego w środowisku uruchomieniowym .NET 5+).

NuGet ma pojęcie uruchamiania w trybie interaktywnym lub w trybie nieinterakcyjnym. W trybie nieinterakcyjnym dostawcy poświadczeń nie są proszeni o blokowanie pakietu NuGet. W trybie interaktywnym dostawca poświadczeń może monitować o zalogowanie się. Różne narzędzia mają różne ustawienia domyślne, więc w zależności od scenariusza może być konieczne wyrażenie zgody lub rezygnacja w trybie interaktywnym.

Narzędzie Wartość domyślna Przełącznik
dotnet CLI nieinterakcyjne --interactive argument. Na przykład dotnet restore --interactive.
MSBuild nieinterakcyjne NuGetInteractive Właściwość MSBuild. Na przykład msbuild -t:restore -p:NuGetInteractive=true.
NuGet.exe interactive -NonInteractive argument. Na przykład nuget.exe restore -NonInteractive.
Visual Studio interactive nie można uruchomić w trybie nieinterakcyjnym.

NuGet.exe obsługuje zarówno dostawców poświadczeń W wersji 1, jak i V2, podczas gdy program MSBuild i zestaw SDK platformy .NET obsługują tylko wtyczki międzyplatformowe (V2).

W programie Visual Studio pakiet NuGet ma interfejs dostawcy poświadczeń programu Visual Studio, którego dostawcy poświadczeń mogą użyć do zapewnienia graficznego środowiska logowania lub w razie potrzeby wywołać interfejsy API programu Visual Studio. Narzędzie NuGet w programie Visual Studio wróci do dostawców poświadczeń wiersza polecenia, jeśli nie może znaleźć dostawcy poświadczeń programu Visual Studio obsługującego źródło.

Program Visual Studio 2017 w wersji 15.9 lub nowszej zawiera dostawcę poświadczeń dla usługi Azure Artifacts, który działa w programach Visual Studio, MSBuild i NuGet.exe. Jednak dostawca poświadczeń dla zestawu .NET SDK nie jest dołączony do programu Visual Studio, dlatego należy zainstalować go oddzielnie , aby pracować z interfejsem dotnet wiersza polecenia.

Lista dostawców poświadczeń

Istnieje żądanie funkcji umożliwiające zainstalowanie dostawców poświadczeń za pośrednictwem narzędzi platformy .NET. Prawdopodobnie ułatwi to odnajdywanie innych dostawców poświadczeń. Dopóki nie zostanie to zaimplementowane, oto lista dostawców poświadczeń, o których wiemy: