Kimliği doğrulanmış akışlardan paketleri kullanma
Geri yükleme ve yükleme gibi birçok NuGet işlemi, nuget.config dosyalarında yapılandırılabilir bir veya daha fazla paket kaynağıyla iletişim gerektirir.
Not
Güvendiğiniz paket kaynaklarını kullanın.
HTTP akışları için NuGet kimliği doğrulanmamış bir istekte bulunacaktır ve sunucu bir HTTP 401 yanıtıyla yanıt verirse NuGet kimlik bilgilerini aşağıdaki sırayla arar:
- Ortam değişkeni
NuGetPackageSourceCredentials_{name}
. - nuget.config dosyalarındaki kimlik bilgileri.
- Paket kaynağınız bir tane sağlıyorsa NuGet kimlik bilgisi sağlayıcısı kullanın.
Kullanmanız gereken kimlik bilgileri paket kaynağı tarafından belirlenir. Bu nedenle, kimlik bilgisi sağlayıcısı kullanmıyorsanız, hangi kimlik bilgilerinin kullanılacağını paket kaynağınızla birlikte denetlemeniz gerekir. Paket kaynaklarının NuGet ile parolanızı (web sitesinde oturum açtığınız) kullanmanızı yasaklayan çok yaygın bir durumdur. Genellikle NuGet'in parolası olarak kullanmak için bir Kişisel Erişim Belirteci oluşturmanız gerekir, ancak kullandığınız NuGet sunucusunun belgelerine bakmanız gerekir. Azure DevOps ve GitHub gibi bazı paket kaynaklarında kapsamlı erişim belirteçleri olduğundan, oluşturduğunuz tüm belirteçlerin gerekli kapsamı içerdiğinden emin olmanız gerekebilir.
Kimlik bilgilerini yönetmek için en iyi güvenlik yöntemleri
NuGet kimlik bilgilerini yukarıda belirtilen sırayla arasa da, özel akışlarla kimlik doğrulaması yaparken kimlik bilgilerini güvenli bir şekilde yönetmek için aşağıdaki sırayı öneririz:
Kimlik Bilgisi Sağlayıcısı: Mümkün olduğunda bir kimlik bilgisi sağlayıcısı kullanılması kesinlikle önerilir. Bu yaklaşım gizli dizilerin düz metin olarak depolanmasını önler ve gizli dizileri kaynak denetimi aracılığıyla yanlışlıkla ortaya çıkarma riskini en aza indirir. Ayrıca, genellikle kimlik bilgilerinin süresi dolduğunda veya değiştiğinde güncelleştirmeniz gereken yer sayısını azaltır. Kimlik bilgisi sağlayıcısı çoklu oturum açmayı destekliyorsa, oturum açma sıklığını veya kimlik bilgilerinin kaydedilmesi gereken yer sayısını azaltabilir. Daha fazla bilgi için kimlik bilgisi sağlayıcıları bölümüne bakın.
nuget.config dosyasında Şifrelenmiş Kimlik Bilgileri: Bir kimlik bilgisi sağlayıcısı kullanılamıyorsa şifrelenmiş kimlik bilgilerini kullanmayı göz önünde bulundurmanız gerekir. Bu yaklaşım, kimlik bilgilerini şifrelenmiş biçimde depolayarak ek bir güvenlik katmanı sağlar. Daha fazla bilgi için nuget.config dosyalarındaki kimlik bilgileri bölümüne bakın.
Not
Şifrelenmiş parolaların yalnızca Windows'ta desteklendiğini unutmayın. Ayrıca, şifreleri yalnızca aynı makinede ve bunları ilk şifreleyen kullanıcı tarafından çözülebilir.
nuget.config dosyasında Ortam Değişkeni Makrolarını Kullanma: Şifrelenmiş kimlik bilgileri kullanmak mümkün değilse, kimlik bilgilerini ortam değişkeni makrolarıyla nuget.config dosyasında depolamayı göz önünde bulundurun. Bu yaklaşım, gerçek kimlik bilgilerini içeren ortam değişkenlerine başvurmanızı sağlar. Saydamlığı artırır ve son kullanıcıların kimlik bilgilerinin nasıl yapılandırıldığını anlamasına yardımcı olur. Daha fazla bilgi için nuget.config dosyalarındaki kimlik bilgileri bölümüne bakın.
Ortam Değişkenlerini Doğrudan Kullanma: Geri dönüş seçeneği olarak, kimlik bilgilerini doğrudan ortam değişkenlerinde depolayabilirsiniz. Ancak, bu yaklaşımın nuget.config dosyasında ortam değişkeni makrolarını kullanmaya kıyasla daha az görünürlük ve denetim sunabileceğini unutmayın. Daha fazla bilgi için ortam değişkenlerindeki kimlik bilgileri bölümüne bakın.
NuGet.Config'de Metin Kimlik Bilgilerini Temizle: Daha önce bahsedilen seçeneklerden birinin kullanılması kesinlikle önerilir. Bu seçenekler uygun değilse, kimlik bilgilerini nuget.config dosyasında depolayabilirsiniz. Ancak, bu seçenek yalnızca başka bir güvenli seçeneğin kullanılamadığı ortamlarda kullanılmalıdır. Daha fazla bilgi için nuget.config dosyalarındaki kimlik bilgileri bölümüne bakın.
Uyarı
Özellikle dosyayı kaynak denetimine kaydederken kimlik bilgilerini nuget.config dosyasında düz metin olarak depolamak, yanlışlıkla kimlik bilgisi sızıntısı olasılığını artırdığından risklidir. Kimlik bilgilerini nuget.config dosyasında depolamanız gerekiyorsa, yukarıda belirtilen daha güvenli seçeneklerden birini kullanmayı göz önünde bulundurun.
Bu en iyi yöntemlere bağlı kalınarak, hassas bilgilerin açığa çıkması riskini en aza indirirken özel akışların kimliğini güvenli bir şekilde doğrulayabilirsiniz.
Ortam değişkenlerinde kimlik bilgileri
NuGet adlı NuGetPackageSourceCredentials_{name}
bir ortam değişkeni arar; burada {name}
nuget.config dosyanızın paket kaynağındaki değeridirkey="name"
.
Ortam değişkeninin değeri olmalıdır Username={username};Password={password}
ve isteğe bağlı olarak değerini içerebilir ;ValidAuthenticationTypes={types}
.
Ortam değişkeni NuGet'in kuralıyla eşleşmiyorsa veya değer NuGet'in beklenen desenini karşılamıyorsa, NuGet ortam değişkenini sessizce yoksayar ve başka bir yerde paket kaynağı için kimlik bilgilerini aramaya devam eder.
NuGet'in ortam değişkenindeki kimlik bilgilerini kullandığını belirten bir günlük yoktur. Bu, ortam değişkeninin süresi dolmuş bir gizli dizi içeriyorsa ve yeni gizli dizi bir nuget.config dosyasına eklendiğinde kimlik doğrulama sorunlarının hatalarını ayıklamada güçlüklere neden olabilir, çünkü yapılandırma dosyası daha düşük önceliğe sahiptir.
İpucu
CI/CD işlem hatlarında ortam değişkenlerini kullanmak, günlüklerde gizli dizilerin yakalanma riskini en aza indirmek için mükemmel bir seçimdir.
Örneğin, aşağıdaki nuget.config dosyasını göz önünde bulundurun:
<configuration>
<packageSources>
<clear />
<add key="Contoso" value="https://nuget.contoso.com/v3/index.json" />
</packageSources>
</configuration>
Bu durumda kaynak adıdır Contoso
ve NuGet ortam değişkeni adını NuGetPackageSourceCredentials_Contoso
arar.
Bazı platformlar büyük/küçük harfe duyarlıdır, bu nedenle nuget.config dosyanızda tanımlandığı gibi ortam adı ve kaynak adı için doğru büyük ve küçük harf karakterlerini kullanmaya dikkat edin.
Kullanıcı adı nugetUser
ve parola ise secret123
ortam değişkeninin değeri olarak Username=nugetUser;Password=secret123
ayarlanmalıdır.
NuGet yalnızca HTTP Temel kimlik doğrulaması için bu kimlik bilgilerini kullanmalıdır, ancak diğer kimlik doğrulama düzenleri için kullanmayacaksa, ortam değişkeninin değerini olarak Username=nugetUser;Password=secret123;ValidAuthenticationTypes=Basic
ayarlayabilirsiniz.
Geçerli kimlik doğrulama türleri hakkında daha fazla bilgi için nuget.config dosyalarındaki paket kimlik bilgileriyle ilgili belgelere bakın.
Not
Ortam değişkenlerinin izin verilen karakterler üzerinde kısıtlamaları vardır ve farklı işletim sistemlerinde farklı kısıtlamalar olabilir. Örneğin, boşluklara izin verilmez. Bu nedenle, platformunuzun ortam değişkenleri için geçersiz karakterler kullanan paket kaynakları için NuGet kimlik bilgilerini belirtmek için bu ortam değişkeni özelliğini kullanırsınız. Böyle durumlarda, nuget.config dosyanızdaki paket kaynağını yeniden adlandırmanız gerekir.
nuget.config dosyalarındaki kimlik bilgileri
nuget.config dosyaları paket kaynağı kimlik bilgilerini içerebilir.
Söz dizimi de dahil olmak üzere daha fazla bilgi için paket kaynağı kimlik bilgilerinin nuget.config dosya başvuru belgesi bölümüne bakın.
Ancak, kimlik bilgilerini ayarlamak için komut satırında kullanmak dotnet nuget update source
daha kolaydır.
Uyarı
Özellikle kimlik bilgilerini düz metin olarak kaydederken nuget.config dosyalarında kimlik bilgilerini ayarlarken dikkatli olun. Kimlik bilgisi kaynak denetimindeki bir nuget.config dosyasına yazılırsa, gizli diziyi yanlışlıkla sızdırma riski artar.
NuGet ayarları birden çok dosyadan toplandığından, kimlik bilgilerini kullanıcı nuget.config dosyanıza kaydetmeniz önerilir.
Derleme güvenilirliği için çözüm (kaynak kodu deposu) nuget.config dosyasındaki paket kaynaklarını bir <clear />
öğesi de dahil olmak üzere kaydetmenizi öneririz.
Nuget.config dosyasındaki kullanıcı adı ve düz metin parolası, kullanmak istediğiniz ortam değişkeni adının başına ve sonuna ekleyerek %
bir ortam değişkeni kullanabilir.
Daha fazla bilgi için ortam değişkenlerini kullanmayla ilgili nuget.config başvuru belgelerine bakın.
Kimlik bilgisi sağlayıcıları
NuGet,eklentilerin NuGet kimlik bilgilerini sağlamasına olanak sağlayan bir genişletilebilirlik modeline sahiptir. NuGet'in bulması için kimlik bilgisi sağlayıcılarının yüklenmesi gereken yol, .NET Framework (NuGet.exe, MSBuild ve Visual Studio) ve .NET SDK (.NET 5+ çalışma zamanında çalışır) için farklıdır.
NuGet'in etkileşimli modda veya etkileşimli olmayan modda çalıştırılma kavramı vardır. Etkileşimli olmayan moddayken, kimlik bilgisi sağlayıcılarının NuGet'i engellememesi istenir. Etkileşimli moddayken, kimlik bilgisi sağlayıcısı oturum açmanızı isteyebilir. Farklı araçların farklı varsayılanları vardır, bu nedenle senaryonuza bağlı olarak etkileşimli modun kabul edilmesi veya geri alınması gerekebilir.
Araç | Varsayılan | Geçiş düğmesi |
---|---|---|
dotnet CLI |
etkileşimli olmayan | --interactive tartışma. Örneğin, dotnet restore --interactive . |
MSBuild | etkileşimli olmayan | NuGetInteractive MSBuild özelliği. Örneğin, msbuild -t:restore -p:NuGetInteractive=true . |
NuGet.exe | etkileşimli | -NonInteractive tartışma. Örneğin, nuget.exe restore -NonInteractive . |
Visual Studio | etkileşimli | etkileşimli olmayan modda çalıştırılamaz. |
NuGet.exe hem V1 hem de V2 kimlik bilgisi sağlayıcılarını desteklerken, MSBuild ve .NET SDK yalnızca platformlar arası (V2) eklentileri destekler.
Visual Studio'da NuGet,kimlik bilgisi sağlayıcılarının grafik oturum açma deneyimi sağlamak için kullanabileceği veya gerekirse Visual Studio API'lerini çağırabilecek bir Visual Studio Kimlik Bilgisi Sağlayıcısı arabirimine sahiptir. Visual Studio'daki NuGet, kaynağı işleyen bir Visual Studio kimlik bilgisi sağlayıcısı bulamazsa komut satırı kimlik bilgisi sağlayıcılarına geri döner.
Visual Studio 2017 sürüm 15.9 ve üzeri, Visual Studio, MSBuild ve NuGet.exe içinde çalışan Azure Artifacts için bir kimlik bilgisi sağlayıcısı içerir.
Ancak, .NET SDK'sının kimlik bilgisi sağlayıcısı Visual Studio'ya dahil değildir, bu nedenle CLI ile dotnet
çalışmak için ayrı olarak yüklenmelidir.
Kimlik bilgisi sağlayıcıları listesi
Kimlik bilgisi sağlayıcılarını .NET araçları aracılığıyla yüklenebilir hale getirmek için bir özellik isteği vardır ve bu, büyük olasılıkla diğer kimlik bilgisi sağlayıcılarını bulmayı kolaylaştırır. Bu uygulanana kadar, farkında olduğumuz kimlik bilgisi sağlayıcılarının listesi aşağıda verilmiştir:
- AWS CodeArtifact NuGet Kimlik Bilgisi Sağlayıcısı
- Azure Artifacts Kimlik Bilgisi Sağlayıcısı. Bu bağlantı yalnızca komut satırı kimlik bilgisi sağlayıcısı içindir.
- Visual Studio için MyGet Kimlik Bilgisi Sağlayıcısı.