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:
- Zmienna środowiskowa
NuGetPackageSourceCredentials_{name}
. - Poświadczenia w plikach nuget.config.
- 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:
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ń.
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ł.
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.
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.
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_Contoso
zmiennej ś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:
- Dostawca poświadczeń NuGet CodeArtifact platformy AWS
- Dostawca poświadczeń usługi Azure Artifacts. Ten link jest przeznaczony tylko dla dostawcy poświadczeń wiersza polecenia.
- Dostawca poświadczeń MyGet dla programu Visual Studio.