App Secrets / User Secrets ile ilgili genel bilgi.
https://docs.asp.net/en/latest/security/app-secrets.html
Çözümün doğuş nedeni:
Bu yöntemin kullanılmasının tavsiye nedeni çoğunlukla şifre gibi önemli bilgilerin appsettings.json da (önceden web.config) unutulması, dolayısıyla "Source control" ortamına yapılan "Check-in" işlemlerinde bu bilgilerle birlikte gitmesi. İnternete açık değilse çok büyük bir problem değil gibi düşünülebilir.Bir diğer nedeni de geliştirme veya test ortamından canlı ortama yapılan aktarımlarda appsetttings.json dosyayının ezilmemesini sağlama yada canlı ortama göre şifre vs. gibi tanımları tekrar yapma gerekliliği.
Dolayısıyla önerilen yöntem şifre gibi ortama göre değişecek diğer bilgileri yapılan Deployment/Publish işleminden ayrıştırmaya yarıyor.
Bu da geliştirme ortamı için "App Secrets" ve canlı ortam için "Ortam Değişkenleri" kullanımı.
Sunucuya erişimi olanlarında şifreleri görmemesi isteniyorsa, bunun için de farklı yöntemler vardır.
Uyumun sağlanması
appsettings.json dosyası:
secrets.json dosyası:
Tanımlara erişim
Ortam değişkenlerine bu şekilde de erişilebilir:Environment.GetEnvironmentVariable("OAuth:Facebook:ClientId")
İlgili tanımlar aşağıdaki anlatıldığı şekilde ortam değişkenlerimde tanımlanırsa
sadece Configuration["OAuth:Facebook:ClientId"] yeterli olacaktır.
Bununla birlikte "magic string" kullanımı engellemek için IOptions arayüzü kullanılmalı:
appsetttings.json tanımlarının sınıf olarak tanımı ve IOptions<> arayüzü üzerinden istenilen sınıfa "Dependency Injection" ile aktarılması.
https://docs.asp.net/en/latest/fundamentals/configuration.html
http://www.davidhayden.me/blog/asp-net-5-configuration-and-ioptions
Canlı ortamda uygulama tanımlarına erişim
App-Secrets dosyasında yapılan key oluşturma formatına benzer yöntem ile Windows'un Ortam değişkenleri / Environments Variables tanım penceresi üzerinde istenen değişkenker eklenir.Örnek değişken: OAuthProviders:Facebook:AppId
"Ortam değişkenleri" / "Environments Variables" penceresine erişim:
Computer Properties > Advanced System Settings > Advanced > Environment Variables
üzerinden erişilen ortam değişkenlerinde System Variables alanında tanım yapılmalıdır.
System Variables kullanılmasının nedeni IIS'in kendi hesabı üzerinden çalıştğından (Application Pool Identity) Bknz: http://stackoverflow.com/a/5731360/503274 ve http://www.iis.net/learn/manage/configuring-security/application-pool-identities, "User Variables"'a yani oturum aşmış kullanıcının ortam değişkenlerine erişemez.
Hiç yorum yok:
Yorum Gönder