Furkan KapukayaYazılım geliştirme
C# ve .NET2 dk okuma

.NET'te Yapılandırma: appsettings, Options Pattern ve Gizli Bilgiler

.NET uygulamalarında appsettings.json, ortam değişkenleri, ortam bazlı ayarlar, Options pattern ile tip güvenli yapılandırma ve parola ile API anahtarlarının güvenli saklanması.

Veritabanı bağlantısı, e-posta sunucusu, API anahtarları, özellik ayarları... Her uygulamanın ortama göre değişen ayarları vardır. .NET'in yapılandırma sistemi bu ayarları düzenli, katmanlı ve güvenli şekilde yönetmeyi sağlar.

Katmanlı yapılandırma

.NET, ayarları birden fazla kaynaktan okur ve sonraki kaynak öncekini ezer. Tipik sıra:

  1. appsettings.json
  2. appsettings.{Ortam}.json (Development, Production)
  3. Geliştirme ortamında User Secrets
  4. Ortam değişkenleri
  5. Komut satırı parametreleri

Böylece aynı kod, geliştirme ve canlı ortamda farklı ayarlarla çalışır.

Options pattern

Ayarları her yerde metin anahtarlarla okumak yerine, onları bir sınıfa bağlamak tip güvenliği sağlar:

public class SmsAyarlari
{
    public required string Saglayici { get; init; }
    public required string Baslik { get; init; }
    public int GunlukLimit { get; init; } = 1000;
}

builder.Services.AddOptions<SmsAyarlari>()
    .Bind(builder.Configuration.GetSection("Sms"))
    .ValidateDataAnnotations()
    .ValidateOnStart();

ValidateOnStart sayesinde eksik veya hatalı bir ayar, uygulama ilk açıldığında fark edilir; gece yarısı bir istek geldiğinde değil.

Gizli bilgiler koda girmemeli

Parolalar, API anahtarları ve bağlantı dizgeleri:

  • Kaynak koda veya depoya gönderilen appsettings.json dosyasına yazılmamalıdır.
  • Geliştirme ortamında User Secrets ile bilgisayarınızda, proje dışında saklanabilir.
  • Canlı ortamda ortam değişkenleri veya bir gizli bilgi kasası (bulut sağlayıcılarının anahtar kasaları gibi) kullanılmalıdır.

Depoya yanlışlıkla gönderilen bir anahtar, silinse bile geçmişte kalır; derhal iptal edilip yenisi oluşturulmalıdır. Bkz. AI ile kod yazarken güvenlik ve Git rehberi.

Ortam değişkeni adlandırma

İç içe ayarlar ortam değişkenlerinde çift alt çizgiyle yazılır: Sms__Baslik. Docker ve CI/CD süreçlerinde bu yöntem sık kullanılır. Bkz. Docker nedir ve CI/CD.

Çalışırken değişen ayarlar

IOptionsMonitor ile bazı ayarlar uygulama yeniden başlatılmadan güncellenebilir. Kritik ayarlarda bu davranışın bilinçli kullanılması gerekir.

Konsol ve masaüstü uygulamalarında

Generic Host ile konsol, WPF ve WinForms uygulamaları da aynı yapılandırma sistemini kullanabilir. Bu, zamanlanmış görevlerin ayarlarını düzenli tutmanın en kolay yoludur.

Sık sorulan sorular

Bağlantı dizgesini şifrelemem gerekir mi?

En iyi yöntem, gizli bilgiyi hiç dosyada tutmamak ve ortam değişkeni veya anahtar kasası kullanmaktır.

appsettings.Production.json depoda olabilir mi?

Gizli bilgi içermediği sürece olabilir. Gizli değerler ortamdan gelmelidir.

Sonuç

Düzenli yapılandırma, hem güvenliği hem de dağıtım kolaylığını artırır. Uygulamalarınızın yapılandırma ve güvenlik düzeni için destek alabilirsiniz.