Aracılığıyla paylaş


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:

  1. Ortam değişkeni NuGetPackageSourceCredentials_{name}.
  2. nuget.config dosyalarındaki kimlik bilgileri.
  3. 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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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_Contosoarar. 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 secret123ortam değişkeninin değeri olarak Username=nugetUser;Password=secret123ayarlanmalı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=Basicayarlayabilirsiniz. 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: