Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Note
Bu, bu makalenin en son sürümü değildir. Geçerli sürüm için bu makalenin .NET 10 sürümüne bakın.
Warning
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 10 sürümüne bakın.
Yayımlayanlar Rick Anderson ve Kirk Larkin
Bu makalede, geliştirme makinesindeki bir ASP.NET Core uygulaması için hassas verilerin nasıl yönetileceğini açıklanmaktadır. Parolaları veya diğer hassas verileri asla kaynak kodunda veya yapılandırma dosyalarında depolamayın. Üretim gizli bilgileri geliştirme veya test amaçlı kullanılmamalıdır. Gizli bilgiler uygulamayla dağıtılmamalıdır. Üretim sırlarına Azure Key Vault gibi denetimli bir araç üzerinden erişilmelidir. Azure test ve üretim gizli dizileri Azure Key Vault yapılandırma sağlayıcısıyla depolanabilir ve korunabilir.
Örnek kodu görüntüleme veya indirme (indirme)
Dağıtılan test ve üretim uygulamaları için kimlik doğrulaması hakkında daha fazla bilgi için bkz . Güvenli kimlik doğrulama akışları.
.NET konsol uygulamasında kullanıcı gizli dizilerini kullanmak için bkz. GitHub dotnet/entityframework.docs sorunu #3939.
Ortam değişkenleriyle çalışma
Ortam değişkenleri, uygulama gizli dizilerinin kodda veya yerel yapılandırma dosyalarında depolanmasını önlemek için kullanılır. Ortam değişkenleri, daha önce belirtilen tüm yapılandırma kaynakları için yapılandırma değerlerini geçersiz kılar.
Bireysel Hesaplar güvenliğinin etkinleştirildiği bir ASP.NET Core web uygulaması düşünün. Projede, varsayılan bir veritabanı bağlantı dizesi, DefaultConnection anahtarı altında appsettings.json dosyasında yer alır. Varsayılan bağlantı dizesi, kullanıcı modunda çalışan ve parola gerektirmeyen LocalDB içindir. Uygulama dağıtımı sırasında, anahtar değerini bir ortam değişkeninden alınan değerle geçersiz kılabilirsiniz DefaultConnection . Ortam değişkeni, hassas kimlik bilgilerini içeren tam bağlantı dizesini depolayabilir.
Warning
Ortam değişkenleri genellikle düz, şifrelenmemiş metin olarak depolanır. Makine veya işlemin güvenliği aşılırsa ortam değişkenlerine güvenilmeyen taraflar erişebilir. Kullanıcı gizli dizilerinin açıklanmasını önlemek için ek önlemler gerekebilir.
Üst üste iki nokta (:) ayırıcısı, her platformda ortam değişkeni hiyerarşik anahtarları ile çalışmaz. Örneğin, Bash ayırıcı olarak iki nokta üst üste işaretini (:) desteklemez. Tüm platformlar çift alt çizgi (__) söz dizimini destekler ve bunu otomatik olarak iki nokta (:) ile değiştirir.
Secret Manager aracını kullanma
Secret Manager, uygulama geliştirme sürecinde hassas verileri depolayan bir araçtır. Bu bağlamda, hassas bir veri parçası uygulama gizli anahtarıdır.
- Uygulama sırları proje ağacından ayrı bir konumda saklanır.
- Bunlar belirli bir projeyle ilişkilendirildi veya çeşitli projelerde paylaşıldı.
- Bunlar kaynak denetimine alınmaz.
Warning
Secret Manager, depolanan gizli bilgileri şifrelemez ve güvenilir bir depolama alanı olarak değerlendirilmemelidir. Sadece geliştirme amaçlıdır. Anahtarlar ve değerler, kullanıcı profili dizinindeki bir JSON yapılandırma dosyasında depolanır.
Secret Manager, değerlerin nerede ve nasıl saklandığı gibi uygulama ayrıntılarını gizler. Bu uygulama ayrıntılarını bilmeden aracı kullanabilirsiniz. Değerler yerel makinenin kullanıcı profili klasöründeki bir JSON dosyasında depolanır:
Dosya sistemi yolu:
%APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json
Dosya sistemi yolunda, <user_secrets_id> kısmını proje dosyanızda belirtilen UserSecretsId değeriyle değiştirin.
Gizli Dizi Yöneticisi ile kaydedilen verilerin konumuna veya biçimine bağlı kod yazmayın. Bu uygulama ayrıntıları değişebilir. Örneğin, gizli değerler şifrelenmez.
Gizli depolamayı etkinleştirme
Secret Manager, kullanıcı profilinizde depolanan projeye özgü yapılandırma ayarlarını kullanır.
CLI'yi kullan
Secret Manager, init komutunu içerir. Kullanıcı gizli dizilerini kullanmak için proje dizininde aşağıdaki komutu çalıştırın:
dotnet user-secrets init
Bu komut, proje dosyasının içine bir UserSecretsId öğe eklerPropertyGroup. Varsayılan olarak, UserSecretsId öğesinin iç metni bir GUID'dir. İç metin rastgeledir, ancak projeye özgüdür. Aşağıdaki örnek, 0000a1a1-b2b2-c3c3-d4d4-eeeeee555555 GUID değerini gösterir.
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<UserSecretsId>0000a1a1-b2b2-c3c3-d4d4-eeeeee555555</UserSecretsId>
</PropertyGroup>
</Project>
Visual Studio'yu kullanma
Visual Studio'da, Çözüm Gezgini'da projeye sağ tıklayın ve bağlam menüsünden Kullanıcı Gizli Dizilerini Yönet'i seçin. Bu hareket, proje dosyasına GUID ile doldurulmuş bir öğe ekler UserSecretsId .
'GenerateAssemblyInfo' 'false' ise
Derleme bilgisi özniteliklerinin oluşturulması (GenerateAssemblyInfo) devre dışı bırakılırsa (false olarak ayarlanırsa), UserSecretsIdAttribute öğesini AssemblyInfo.cs dosyasına el ile ekleyin. Örneğin:
[assembly: UserSecretsId("your_user_secrets_id")]
özniteliğini UserSecretsIdAssemblyInfo.cs dosyasına el ile eklediğinizde, değerin UserSecretsId proje dosyasındaki değerle eşleşmesi gerekir.
Gizli bilgi ayarlama
Bir anahtardan ve değerinden oluşan bir uygulama sır anahtarı tanımlayın. Gizli anahtar, projenin UserSecretsId değeriyle ilişkilendirilir. Örneğin, proje dosyasının bulunduğu dizinden aşağıdaki komutu çalıştırın:
dotnet user-secrets set "Movies:ServiceApiKey" "12345"
Bu örnekte iki nokta, Movies öğesinin ServiceApiKey özelliğine sahip bir nesne sabiti olduğunu gösterir.
Secret Manager'ı diğer dizinlerden de kullanabilirsiniz. Proje dosyasının --project bulunduğu dosya sistemi yolunu sağlama seçeneğini ekleyin. Örneğin:
dotnet user-secrets set "Movies:ServiceApiKey" "12345" --project "C:\apps\WebApp1\src\WebApp1"
Visual Studio'da JSON yapısı düzleştirme
Visual Studio Manage User Secrets hareketi, metin düzenleyicisinde bir secrets.json dosyası açar. secrets.json dosyasının içeriğini depoacak anahtar-değer çiftleriyle değiştirin. Örneğin:
{
"Movies": {
"ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"ServiceApiKey": "12345"
}
}
JSON yapısı, dotnet user-secrets remove veya dotnet user-secrets set komutu aracılığıyla yapılan değişikliklerden sonra düzleştirilir. Örneğin, dotnet user-secrets remove "Movies:ConnectionString" çalıştırmak Movies nesne sözlüğünü daraltır. Değiştirilen dosya aşağıdaki JSON'a benzer:
{
"Movies:ServiceApiKey": "12345"
}
Birden çok gizli anahtar ayarlama
JSON set komutuna bağlanarak bir dizi gizli dizi ayarlanabilir. Aşağıdaki örnekte, input.json dosyasının içeriği komutuna aktarılır set .
Aşağıdaki komutu çalıştırın:
type .\input.json | dotnet user-secrets set
Gizliye eriş
Gizli bir bilgiye erişmek için aşağıdaki adımları tamamlayın:
Kullanıcı sırları yapılandırma kaynağını kaydet
Kullanıcı sırları yapılandırma sağlayıcısı, yapılandırma kaynağını .NET Yapılandırma API'sine kaydeder.
dotnet new komutuyla veya Visual Studio ile oluşturulan ASP.NET Core web uygulamaları aşağıdaki kodu oluşturur:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
WebApplication.CreateBuilder yöntemi, önceden yapılandırılmış varsayılanlarla sınıfının yeni bir örneğini WebApplicationBuilder başlatır. Başlatılan WebApplicationBuilder (builder), varsayılan yapılandırma sağlar ve EnvironmentName özelliği Development olduğunda AddUserSecrets yöntemini çağırır.
Yapılandırma API'sini kullanarak gizliyi okuyun
Aşağıdaki örneklerde anahtarın nasıl okunduğu gösterilmektedir Movies:ServiceApiKey :
Program.cs dosyası
var builder = WebApplication.CreateBuilder(args);
var movieApiKey = builder.Configuration["Movies:ServiceApiKey"];
var app = builder.Build();
app.MapGet("/", () => movieApiKey);
app.Run();
Razor Sayfalar sayfa modeli
public class IndexModel : PageModel
{
private readonly IConfiguration _config;
public IndexModel(IConfiguration config)
{
_config = config;
}
public void OnGet()
{
var moviesApiKey = _config["Movies:ServiceApiKey"];
// call Movies service with the API key
}
}
Daha fazla bilgi için, bkz. ASP.NET Core’da yapılandırma analizi.
Map secret bilgilerini bir POCO'ya eşleştirme
Bir nesne sabit değerinin tamamını POCO'ya (özelliklere sahip basit bir .NET sınıfı) eşlemek, ilgili özellikleri toplamada yararlıdır.
Uygulama secrets.json dosyasının aşağıdaki iki gizli diziyi içerdiğini varsayalım:
{
"Movies:ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"Movies:ServiceApiKey": "12345"
}
Önceki gizli dizileri bir POCO ile eşlemek için .NET Yapılandırma API'sinin nesne grafı bağlama özelliğini kullanın. Aşağıdaki kod, özel bir MovieSettings POCO'ya bağlanır ve ServiceApiKey özellik değerine erişir:
var moviesConfig =
Configuration.GetSection("Movies").Get<MovieSettings>();
_moviesApiKey = moviesConfig.ServiceApiKey;
Movies:ConnectionString ve Movies:ServiceApiKey gizli anahtarları, MovieSettings içindeki ilgili özelliklere eşlenir.
public class MovieSettings
{
public string ConnectionString { get; set; }
public string ServiceApiKey { get; set; }
}
Gizli anahtarlarla dize değiştirme kullanın
Parolaları düz metin olarak depolamak güvenli değildir. appsettings.json gibi, kaynak kod deposuna işlenebilecek bir yapılandırma dosyasında gizli bilgileri asla depolamayın.
Örneğin, appsettings.json dosyasında depolanan bir veritabanı bağlantı dizesi parola içermemelidir. Bunun yerine parolayı gizli bilgi olarak depolayın ve çalışma zamanında bağlantı dizesine parolayı dahil edin. Örneğin:
dotnet user-secrets set "DbPassword" "`<secret value>`"
Örnekteki <secret value> yer tutucuyu parola değeriyle değiştirin. Bir nesnenin SqlConnectionStringBuilder özelliğindeki Password gizli anahtarın değerini, bağlantı dizesi parola değeri olarak içerecek şekilde ayarlayın:
using System.Data.SqlClient;
var builder = WebApplication.CreateBuilder(args);
var conStrBuilder = new SqlConnectionStringBuilder(
builder.Configuration.GetConnectionString("Movies"));
conStrBuilder.Password = builder.Configuration["DbPassword"];
var connection = conStrBuilder.ConnectionString;
var app = builder.Build();
app.MapGet("/", () => connection);
app.Run();
Sırları listele
Uygulama secrets.json dosyasının aşağıdaki iki gizli diziyi içerdiğini varsayalım:
{
"Movies:ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"Movies:ServiceApiKey": "12345"
}
Proje dosyasının bulunduğu dizinden aşağıdaki komutu çalıştırın:
dotnet user-secrets list
Aşağıdaki çıkış görüntülenir:
Movies:ConnectionString = Server=(localdb)\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true
Movies:ServiceApiKey = 12345
Örnekte, anahtar adlarındaki iki nokta üst üste (:), secrets.json dosyasındaki nesne hiyerarşisini belirtir.
Tek bir sırrı kaldırma
Uygulama secrets.json dosyasının aşağıdaki iki gizli diziyi içerdiğini varsayalım:
{
"Movies:ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"Movies:ServiceApiKey": "12345"
}
Proje dosyasının bulunduğu dizinden aşağıdaki komutu çalıştırın:
dotnet user-secrets remove "Movies:ConnectionString"
Uygulama secrets.json dosyası, anahtarla ilişkili anahtar-değer çiftini Movies:ConnectionString kaldırmak için değiştirilir:
{
"Movies": {
"ServiceApiKey": "12345"
}
}
Komut dotnet user-secrets list aşağıdaki iletiyi görüntüler:
Movies:ServiceApiKey = 12345
Tüm gizli bilgileri kaldır
Uygulama secrets.json dosyasının aşağıdaki iki gizli diziyi içerdiğini varsayalım:
{
"Movies:ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"Movies:ServiceApiKey": "12345"
}
Proje dosyasının bulunduğu dizinden aşağıdaki komutu çalıştırın:
dotnet user-secrets clear
Uygulamanın tüm kullanıcı gizli dizileri secrets.json dosyasından silinir:
{}
komutu çalıştırılırken dotnet user-secrets list aşağıdaki ileti görüntülenir:
No secrets configured for this application.
Visual Studio ile kullanıcı sırlarını yönetme
Visual Studio'da kullanıcı gizli dizilerini yönetmek için Çözüm Gezgini'da projeye sağ tıklayın ve User Secrets öğesini seçin:
Kullanıcı gizli bilgilerini ASP.NET Framework'ten ASP.NET Core'a geçirme
Depolanmış kullanıcı gizli bilgilerinizi ASP.NET Framework'ten ASP.NET Core'a taşıyabilirsiniz. Daha fazla bilgi için bkz. GitHub dotnet/aspnetcore.docs sorunu #27611 - Kullanıcı Gizli Dizileri belgelerinde AssemblyInfo.cs uyumsuzluğundan bahsedilmiyor.
Web dışı uygulamalarda kullanıcı sırlarıyla çalışma
Hedef Microsoft.NET.Sdk.Web projelere otomatik olarak kullanıcı sırları için destek eklenir.
Microsoft.NET.Sdk hedefleyen projeler, örneğin konsol uygulamaları için, yapılandırma uzantısını ve kullanıcı sırlarını NuGet paketleri olarak açıkça yükleyin.
Install-Package Microsoft.Extensions.Configuration
Install-Package Microsoft.Extensions.Configuration.UserSecrets
Paketleri yükledikten sonra projeyi başlatın ve gizli dizileri bir web uygulamasıyla aynı şekilde ayarlayın. Aşağıdaki örnekte anahtarla bir gizli dizi kümesinin değerini alan bir konsol uygulaması gösterilmektedir AppSecret :
using Microsoft.Extensions.Configuration;
namespace ConsoleApp;
class Program
{
static void Main(string[] args)
{
IConfigurationRoot config = new ConfigurationBuilder()
.AddUserSecrets<Program>()
.Build();
Console.WriteLine(config["AppSecret"]);
}
}
İlgili içerik
Rick Anderson, Kirk Larkin, Daniel Roth ve Scott Addie tarafından
Örnek kodu görüntüleme veya indirme (indirme)
Bu makalede, geliştirme makinesindeki bir ASP.NET Core uygulaması için hassas verilerin nasıl yönetileceğini açıklanmaktadır. Parolaları veya diğer hassas verileri asla kaynak kodunda veya yapılandırma dosyalarında depolamayın. Üretim gizli bilgileri geliştirme veya test amaçlı kullanılmamalıdır. Gizli bilgiler uygulamayla dağıtılmamalıdır. Üretim sırlarına Azure Key Vault gibi denetimli bir araç üzerinden erişilmelidir. Azure test ve üretim gizli dizileri Azure Key Vault yapılandırma sağlayıcısıyla depolanabilir ve korunabilir.
Test ve üretim ortamları için kimlik doğrulaması hakkında daha fazla bilgi için bkz . Güvenli kimlik doğrulama akışları.
Ortam değişkenleri
Ortam değişkenleri, uygulama gizli dizilerinin kodda veya yerel yapılandırma dosyalarında depolanmasını önlemek için kullanılır. Ortam değişkenleri, daha önce belirtilen tüm yapılandırma kaynakları için yapılandırma değerlerini geçersiz kılar.
Bireysel Kullanıcı Hesapları güvenliğinin etkinleştirildiği bir ASP.NET Core web uygulaması düşünün. Projenin appsettings.json dosyasına anahtarıyla DefaultConnectionbirlikte varsayılan veritabanı bağlantı dizesi eklenir. Varsayılan bağlantı dizesi, kullanıcı modunda çalışan ve parola gerektirmeyen LocalDB içindir. Uygulama dağıtımı sırasında anahtar değeri bir DefaultConnection ortam değişkeninin değeriyle geçersiz kılınabilir. Ortam değişkeni, hassas kimlik bilgileriyle tam bağlantı dizesi depolayabilir.
Warning
Ortam değişkenleri genellikle düz, şifrelenmemiş metinde depolanır. Makine veya işlemin güvenliği ihlal edilirse ortam değişkenlerine güvenilmeyen taraflar tarafından erişilebilir. Kullanıcı gizli dizilerinin açığa çıkmasını önlemek için ek önlemler gerekebilir.
Üst üste iki nokta (:) ayırıcısı, her platformda ortam değişkeni hiyerarşik anahtarları ile çalışmaz. Örneğin, Bash ayırıcı olarak iki nokta üst üste işaretini (:) desteklemez. Tüm platformlar çift alt çizgi (__) söz dizimini destekler ve bunu otomatik olarak iki nokta (:) ile değiştirir.
Gizli Yönetici
Gizli Bilgi Yöneticisi aracı, uygulama geliştirme sırasında hassas verileri depolar. Bu bağlamda, hassas veri bir uygulama sırrıdır. Uygulama sırları proje ağacından ayrı bir konumda saklanır. Uygulama sırları belirli bir projeyle ilişkilendirilir veya birden fazla projede paylaşılır. Uygulama sırları kaynak denetimine dahil edilmiyor.
Warning
Sır Yöneticisi aracı depolanan sırları şifrelemez ve güvenilir bir depo olarak değerlendirilmemelidir. Sadece geliştirme amaçlıdır. Anahtarlar ve değerler, kullanıcı profili dizinindeki bir JSON yapılandırma dosyasında depolanır.
Secret Manager aracı nasıl çalışır?
Gizli Dizi Yöneticisi aracı, değerlerin nerede ve nasıl depolandığı gibi uygulama ayrıntılarını gizler. Bu uygulama ayrıntılarını bilmeden aracı kullanabilirsiniz. Değerler yerel makinenin kullanıcı profili klasöründeki bir JSON dosyasında depolanır:
Dosya sistemi yolu:
%APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json
Proje dosyasında belirtilen <user_secrets_id> değeriyle UserSecretsId değerini önceki dosya yollarında değiştirin.
Gizli Dizi Yöneticisi aracıyla kaydedilen verilerin konumuna veya biçimine bağlı kod yazmayın. Bu uygulama ayrıntıları değişebilir. Örneğin, gizli değerler şifrelenmiş değildir, ancak gelecekte şifrelenebilir.
Gizli depolamayı etkinleştirme
Sır Yöneticisi aracı, kullanıcı profilinizde depolanan projeye özgü yapılandırma ayarları üzerinde işler.
Gizli Dizi Yöneticisi aracı, .NET Core SDK 3.0.100 veya sonraki sürümlerinde bir init komut içerir. Kullanıcı gizli dizilerini kullanmak için proje dizininde aşağıdaki komutu çalıştırın:
dotnet user-secrets init
Yukarıdaki komut, proje dosyasının içine bir UserSecretsIdPropertyGroup öğe ekler. Varsayılan olarak, UserSecretsId öğesinin iç metni bir GUID'dir. İç metin rastgeledir, ancak projeye özgüdür.
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UserSecretsId>79a3edd0-2092-40a2-a04d-dcb46d5ca9ed</UserSecretsId>
</PropertyGroup>
Visual Studio'da, Çözüm Gezgini'da projeye sağ tıklayın ve bağlam menüsünden Kullanıcı Gizli Dizilerini Yönet'i seçin. Bu hareket, proje dosyasına GUID ile doldurulmuş bir öğe ekler UserSecretsId .
Gizli bilgi ayarlama
Bir anahtardan ve değerinden oluşan bir uygulama sır anahtarı tanımlayın. Gizli anahtar, projenin UserSecretsId değeriyle ilişkilendirilir. Örneğin, proje dosyasının bulunduğu dizinden aşağıdaki komutu çalıştırın:
dotnet user-secrets set "Movies:ServiceApiKey" "12345"
Önceki örnekte, iki nokta üst üste işareti, Movies nesne literalının ServiceApiKey özelliği olduğunu belirtir.
Gizli Dizi Yöneticisi aracı diğer dizinlerden de kullanılabilir. Proje dosyasının --project bulunduğu dosya sistemi yolunu sağlamak için seçeneğini kullanın. Örneğin:
dotnet user-secrets set "Movies:ServiceApiKey" "12345" --project "C:\apps\WebApp1\src\WebApp1"
Visual Studio'da JSON yapısı düzleştirme
Visual Studio'nun Kullanıcı Gizli Dizilerini Yönet hareketi, metin düzenleyicisinde bir secrets.json dosya açar. öğesinin içeriğini secrets.json depolanacak anahtar-değer çiftleriyle değiştirin. Örneğin:
{
"Movies": {
"ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"ServiceApiKey": "12345"
}
}
JSON yapısı, dotnet user-secrets remove veya dotnet user-secrets set aracılığıyla yapılan değişikliklerden sonra düzleştirilir. Örneğin, dotnet user-secrets remove "Movies:ConnectionString" çalıştırmak Movies nesne sözlüğünü daraltır. Değiştirilen dosya aşağıdaki JSON'a benzer:
{
"Movies:ServiceApiKey": "12345"
}
Birden çok gizli anahtar ayarlama
JSON set komutuna bağlanarak bir dizi gizli dizi ayarlanabilir. Aşağıdaki örnekte, input.json dosyanın içeriği komutuna set aktarılır.
Bir komut kabuğu açın ve aşağıdaki komutu çalıştırın:
type .\input.json | dotnet user-secrets set
Gizliye eriş
Gizli bir bilgiye erişmek için aşağıdaki adımları tamamlayın:
- Kullanıcı sırları yapılandırma kaynağını kaydet
- Yapılandırma API'sini kullanarak gizli bilgiyi okuyun
Kullanıcı sırları yapılandırma kaynağını kaydet
Kullanıcı sırları yapılandırma sağlayıcısı, yapılandırma kaynağını .NET Yapılandırma API'sine kaydeder.
Proje CreateDefaultBuilder çağırdığında, kullanıcı sırları yapılandırma kaynağı Geliştirme moduna otomatik olarak eklenir.
CreateDefaultBuilder, AddUserSecrets olduğunda EnvironmentName çağırır Development:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
CreateDefaultBuilder çağrılmadığında, AddUserSecrets fonksiyonunu ConfigureAppConfiguration içinde çağırarak kullanıcı sırları yapılandırma kaynağını açıkça ekleyin. Uygulama AddUserSecrets ortamında çalışırken yalnızca Development çağrısını yapın, aşağıdaki örnekte gösterildiği gibi.
public class Program
{
public static void Main(string[] args)
{
var host = new HostBuilder()
.ConfigureAppConfiguration((hostContext, builder) =>
{
// Add other providers for JSON, etc.
if (hostContext.HostingEnvironment.IsDevelopment())
{
builder.AddUserSecrets<Program>();
}
})
.Build();
host.Run();
}
}
Yapılandırma API'sini kullanarak gizliyi okuyun
Kullanıcı gizli dizileri yapılandırma kaynağı kayıtlıysa, .NET Yapılandırma API'si gizli dizileri okuyabilir.
Oluşturucu ekleme , .NET Yapılandırma API'sine erişim kazanmak için kullanılabilir. Aşağıdaki anahtar Movies:ServiceApiKey okuma örneklerini göz önünde bulundurun:
Başlangıç sınıfı:
public class Startup
{
private string _moviesApiKey = null;
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
_moviesApiKey = Configuration["Movies:ServiceApiKey"];
}
public void Configure(IApplicationBuilder app)
{
app.Run(async (context) =>
{
var result = string.IsNullOrEmpty(_moviesApiKey) ? "Null" : "Not Null";
await context.Response.WriteAsync($"Secret is {result}");
});
}
}
Razor Sayfa modeli:
public class IndexModel : PageModel
{
private readonly IConfiguration _config;
public IndexModel(IConfiguration config)
{
_config = config;
}
public void OnGet()
{
var moviesApiKey = _config["Movies:ServiceApiKey"];
// call Movies service with the API key
}
}
Daha fazla bilgi için bkz. Startup'ta Erişim yapılandırması ve Sayfalardaki Razor Erişim yapılandırması.
Map secret bilgilerini bir POCO'ya eşleştirme
Bir nesne sabit değerinin tamamını POCO'ya (özelliklere sahip basit bir .NET sınıfı) eşlemek, ilgili özellikleri toplamada yararlıdır.
Uygulama secrets.json dosyasının aşağıdaki iki gizli diziyi içerdiğini varsayalım:
{
"Movies:ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"Movies:ServiceApiKey": "12345"
}
Önceki gizli dizileri bir POCO ile eşlemek için .NET Yapılandırma API'sinin nesne grafı bağlama özelliğini kullanın. Aşağıdaki kod, özel bir MovieSettings POCO'ya bağlanır ve ServiceApiKey özellik değerine erişir:
var moviesConfig =
Configuration.GetSection("Movies").Get<MovieSettings>();
_moviesApiKey = moviesConfig.ServiceApiKey;
Movies:ConnectionString ve Movies:ServiceApiKey gizli anahtarları, MovieSettings içindeki ilgili özelliklere eşlenir.
public class MovieSettings
{
public string ConnectionString { get; set; }
public string ServiceApiKey { get; set; }
}
Sırlarla dize değiştirme
Parolaları düz metin olarak depolamak güvenli değildir. Gizli bilgileri hiçbir zaman gibi appsettings.json yapılandırma dosyasında depolamayın. Bu dosya, versiyon kontrol sistemine kaydolabilir.
Örneğin, içinde depolanan appsettings.json bir veritabanı bağlantı dizesi parola içermemelidir. Bunun yerine parolayı gizli bilgi olarak depolayın ve çalışma zamanında bağlantı dizesine parolayı dahil edin. Örneğin:
dotnet user-secrets set "DbPassword" "<secret value>"
<secret value> Önceki örnekte yer tutucuyu parola değeriyle değiştirin. Bir nesnenin SqlConnectionStringBuilder özelliğindeki Password gizli anahtarın değerini, bağlantı dizesi parola değeri olarak içerecek şekilde ayarlayın:
using System.Data.SqlClient;
var builder = WebApplication.CreateBuilder(args);
var conStrBuilder = new SqlConnectionStringBuilder(
builder.Configuration.GetConnectionString("Movies"));
conStrBuilder.Password = builder.Configuration["DbPassword"];
var connection = conStrBuilder.ConnectionString;
var app = builder.Build();
app.MapGet("/", () => connection);
app.Run();
Sırları listele
Uygulama secrets.json dosyasının aşağıdaki iki gizli diziyi içerdiğini varsayalım:
{
"Movies:ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"Movies:ServiceApiKey": "12345"
}
Proje dosyasının bulunduğu dizinden aşağıdaki komutu çalıştırın:
dotnet user-secrets list
Aşağıdaki çıkış görüntülenir:
Movies:ConnectionString = Server=(localdb)\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true
Movies:ServiceApiKey = 12345
Yukarıdaki örnekte, anahtar adlarındaki iki nokta, secrets.json içindeki nesne hiyerarşisini belirtir.
Tek bir sırrı kaldırma
Uygulama secrets.json dosyasının aşağıdaki iki gizli diziyi içerdiğini varsayalım:
{
"Movies:ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"Movies:ServiceApiKey": "12345"
}
Proje dosyasının bulunduğu dizinden aşağıdaki komutu çalıştırın:
dotnet user-secrets remove "Movies:ConnectionString"
Uygulamanın secrets.json dosyası, anahtarla MoviesConnectionString ilişkili anahtar-değer çiftini kaldırmak için değiştirildi:
{
"Movies": {
"ServiceApiKey": "12345"
}
}
dotnet user-secrets list aşağıdaki iletiyi görüntüler:
Movies:ServiceApiKey = 12345
Tüm gizli bilgileri kaldır
Uygulama secrets.json dosyasının aşağıdaki iki gizli diziyi içerdiğini varsayalım:
{
"Movies:ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"Movies:ServiceApiKey": "12345"
}
Proje dosyasının bulunduğu dizinden aşağıdaki komutu çalıştırın:
dotnet user-secrets clear
Uygulamanın kullanıcıya ait tüm gizli bilgiler secrets.json dosyasından silindi.
{}
dotnet user-secrets list komutunu çalıştırmak, aşağıdaki mesajı görüntüler:
No secrets configured for this application.
Visual Studio ile kullanıcı sırlarını yönetme
Visual Studio'da kullanıcı gizli dizilerini yönetmek için çözüm gezgininde projeye sağ tıklayın ve Kullanıcı Gizli Dizilerini Yönet'i seçin:
Kullanıcı Gizli Dizilerini ASP.NET Framework'ten ASP.NET Core'a Geçirme
Bu GitHub sorununa bakın.
Web dışı uygulamalarda kullanıcı sırları
Hedef Microsoft.NET.Sdk.Web projelere otomatik olarak kullanıcı sırları için destek eklenir.
Microsoft.NET.Sdk hedefleyen projeler, örneğin konsol uygulamaları için, yapılandırma uzantısını ve kullanıcı sırlarını NuGet paketleri olarak açıkça yükleyin.
PowerShell'i kullanma:
Install-Package Microsoft.Extensions.Configuration
Install-Package Microsoft.Extensions.Configuration.UserSecrets
.NET CLI'yi kullanma:
dotnet add package Microsoft.Extensions.Configuration
dotnet add package Microsoft.Extensions.Configuration.UserSecrets
Paketler yüklendikten sonra projeyi başlatın ve gizli dizileri bir web uygulamasıyla aynı şekilde ayarlayın. Aşağıdaki örnekte, "AppSecret" anahtarıyla ayarlanmış bir gizli dizinin değerini alan bir konsol uygulaması gösterilmektedir:
using Microsoft.Extensions.Configuration;
namespace ConsoleApp;
class Program
{
static void Main(string[] args)
{
IConfigurationRoot config = new ConfigurationBuilder()
.AddUserSecrets<Program>()
.Build();
Console.WriteLine(config["AppSecret"]);
}
}
Ek kaynaklar
- IIS'den kullanıcı gizli dizilerine erişme hakkında bilgi için bu soruna ve bu soruna bakın.
- ASP.NET Core'da yapılandırma
- Azure Key Vault yapılandırma sağlayıcısı
ASP.NET Core