Azure Artifacts ve NuGet Authentication Sorunları: Credential Provider Kurulumu
Projenize yeni bir paket eklemeye çalışıyorsunuz, dotnet restore komutunu çalıştırıyorsunuz ve terminalinizde o can sıkıcı hata beliriyor: 401 Unauthorized. Eğer Azure DevOps (Artifacts) üzerinde barınan private feed’ler ile çalışıyorsanız, bu senaryo size hiç yabancı gelmeyecektir.
Sürekli Personal Access Token (PAT) yenilemek veya nuget.config içine şifre gömmek (ki bunu asla yapmamalısınız) yerine, Microsoft’un sunduğu Azure Artifacts Credential Provider aracını kullanarak bu süreci tamamen otomatize edebilirsiniz. Bu yazıda, bu aracı en basit haliyle nasıl kurup kullanacağımıza bakacağız.
Credential Provider Nedir ve Neden İhtiyacımız Var?
Normal şartlarda .NET CLI (dotnet), Azure Artifacts gibi korumalı feed’lerle nasıl konuşacağını bilemez. Interactive Login (tarayıcı üzerinden giriş) yeteneği default olarak gelmez.
Azure Artifacts Credential Provider, NuGet.exe veya dotnet CLI ile Azure Artifacts beslemeleri arasında bir köprü görevi görür. Siz dotnet restore dediğinizde araya girer, authentication flow’u tetikler (gerekirse Device Login penceresi açar) ve token’ı alıp CLI’a teslim eder.
Sonuç? Kesintisiz restore işlemi.
Kurulum Adımları (İşletim Sistemine Göre)
Microsoft ekibi bu işi oldukça basitleştirmiş. Tek bir script ile kurulumu tamamlayabiliyoruz.
Windows İçin Kurulum (PowerShell)
PowerShell’i yönetici olarak (Admin) çalıştırmanıza gerek yoktur, kullanıcı bazlı kurulum yapar.
PowerShell
iex "& { $(irm https://aka.ms/install-artifacts-credprovider.ps1) }"
Bu komut, .nuget/plugins klasörüne gerekli binary dosyalarını indirir ve yapılandırır.
Linux ve macOS İçin Kurulum (Bash)
Linux dağıtımları veya macOS kullanıyorsanız terminal üzerinden şu komutu çalıştırmanız yeterli:
Bash
wget -qO- https://aka.ms/install-artifacts-credprovider.sh | bash
Nasıl Kullanılır?
Kurulum bitti, peki şimdi ne yapacaksınız? Aslında hiçbir şey. Aracın güzelliği burada.
Proje dizinine gidin ve her zamanki gibi restore işlemini başlatın:
Bash
dotnet restore --interactive
Buradaki kritik nokta --interactive parametresidir.
- Bu komutu çalıştırdığınızda, Credential Provider devreye girer.
- Terminalde size bir kod verir ve “microsoft.com/devicelogin” adresine gitmenizi ister.
- Tarayıcıda kodu girip Azure hesabınızla login olduğunuzda, terminaldeki işlem otomatik olarak devam eder ve paketleriniz yüklenir.
Not: Bir kere login olduktan sonra token belirli bir süre cachelenir (önbelleğe alınır), yani her restore işleminde login olmanız gerekmez.
Docker ve CI/CD Ortamları İçin İpucu
Eğer bu işlemi Docker build sırasında (CI/CD pipeline içinde) yapıyorsanız, interactive mod çalışmayacaktır. Bu durumda VSS_NUGET_EXTERNAL_FEED_ENDPOINTS environment variable’ını kullanmanız gerekir. Ancak en temiz yöntem, build pipeline’ınızda (örneğin Azure Pipelines) NuGetAuthenticate task’ını kullanmaktır; bu task, Credential Provider’ı arka planda sizin için yönetir.
Docker için basit bir “Session Token” yöntemi ise şöyledir:
- Host makinenizde login olun.
- Token’ı environment variable olarak Docker build işlemine pass edin.
Ancak production pipeline’ları için önerim her zaman Service Connection kullanmaktır.
En İyi Pratikler (Best Practices)
- NuGet.config Temizliği:
nuget.configdosyanızda asla clear-text şifreler (PAT vb.) saklamayın. Kaynak kontrolüne (Git) şifre göndermek büyük bir güvenlik açığıdır. - Interactive Mod: Local geliştirme ortamında her zaman
dotnet restore --interactiveflag’ini kullanmayı alışkanlık haline getirin. - Sürüm Güncelleme: Kurulum scriptini belirli aralıklarla çalıştırarak Credential Provider’ın güncel kalmasını sağlayın. Microsoft bu aracı sık sık güncelliyor.
Sonuç
Azure Artifacts Credential Provider, .NET geliştiricilerinin “Authentication” çilesini sona erdiren, “kur ve unut” mantığında çalışan harika bir araçtır. Kurulumu sadece 10 saniye sürer ama size saatlerce sürecek “Neden paket gelmiyor?” debug süreçlerinden tasarruf ettirir.
Siz private feed yönetimini nasıl yapıyorsunuz? CI/CD tarafında yaşadığınız spesifik sorunlar varsa yorumlarda tartışalım veya GitHub üzerinden iletişime geçebilirsiniz.
Bir sonraki yazıda görüşmek üzere.