Kasa geliştirme aşamasında uygulama gizli dizilerinin depolanması ASP.NET Core
Rick Anderson ve Rick Larkin
Örnek kodu görüntüleme veya indirme ( nasılindir)
Bu belgede, bir geliştirme makinesi üzerinde bir uygulamanın ASP.NET Core verileri yönetme açıkmektedir. Parolaları veya diğer hassas verileri hiçbir zaman kaynak kodunda depolamayın. Üretim gizli dizileri geliştirme veya test için kullanılmamalı. Gizli diziler uygulamayla dağıtılamaması gerekir. Bunun yerine üretim gizli dizilere ortam değişkenleri veya ortam değişkenleri gibi denetimli bir Azure Key Vault. Azure test ve üretim gizli dizilerini, azure test ve üretim gizli dizilerini Azure Key Vault koruyabilirsiniz.
Ortam değişkenleri
Ortam değişkenleri, uygulama gizli dizilerinin kodda veya yerel yapılandırma dosyalarında depolanmasından kaçınmak 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 ASP.NET Core güvenliğinin etkin olduğu bir web uygulaması düşünün. Varsayılan veritabanı bağlantı dizesi, projesinin dosyasına appsettings.json anahtarıyla birlikte dahil DefaultConnection edilir. Varsayılan bağlantı dizesi, kullanıcı modunda çalışan ve parola gerektirmeyen LocalDB'ye göredir. Uygulama dağıtımı sırasında DefaultConnection anahtar değeri bir ortam değişkeninin değeriyle geçersiz kılınabilir. Ortam değişkeni, hassas kimlik bilgileriyle tam bağlantı dizesini depolar.
Uyarı
Ortam değişkenleri genellikle düz, şifrelenmemiş metinlerde depolanır. Makine veya işlem tehlikeye girerse, ortam değişkenlerine güvenilmeyen taraflar tarafından erişilebilir. Kullanıcı gizli dizilerinin açıklanmasına yönelik ek önlemler gerekebilir.
Ayırıcı, : tüm platformlarda ortam değişkeni hiyerarşik anahtarlarla birlikte çalışmaz. __çift alt çizgi şöyledir:
- Tüm platformlar tarafından de destekler. Örneğin,
:ayıracı Bash tarafından desteklanmaz,ancak__bu şekildedir. - Otomatik olarak bir ile değiştirilir
:
Gizli Gizli Yönetici
Gizli Bilgi Yöneticisi aracı, gizli bir proje geliştirme sırasında hassas ASP.NET Core depolar. Bu bağlamda hassas verilerin bir parçası bir uygulama gizlidir. Uygulama gizli dizileri proje ağacından ayrı bir konumda depolanır. Uygulama gizli dizileri belirli bir projeyle ilişkilendirildi veya birkaç proje arasında paylaşıldı. Uygulama gizli dizileri kaynak denetimine iade edilemez.
Uyarı
Gizli Dizi Yöneticisi aracı depolanan gizli dizileri şifrelemez ve güvenilir bir depo olarak kabul edilmelidir. Yalnızca geliştirme amaçlıdır. Anahtarlar ve değerler, kullanıcı profili dizininde bir JSON yapılandırma dosyasında depolanır.
Gizli Bilgi Yöneticisi aracı nasıl çalışır?
Secret Manager 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
Yukarıdaki dosya yollarında değerini <user_secrets_id> proje dosyasında belirtilen UserSecretsId değerle değiştirin.
Gizli Bilgi Yöneticisi aracıyla kaydedilen verilerin konumu veya biçimine bağlı kod yazmayın. Bu uygulama ayrıntıları değişebilir. Örneğin, gizli değerler şifrelenmez, ancak gelecekte olabilir.
Gizli depolamayı etkinleştirme
Gizli Parola Yöneticisi aracı, kullanıcı profilinizde depolanan projeye özgü yapılandırma ayarları üzerinde çalışır.
Gizli Bilgi Yöneticisi aracı bir komut init 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 UserSecretsId dosyasının içinde bir öğesi PropertyGroup ekler. Varsayılan olarak, iç metni UserSecretsId bir GUID'tir. İç metin rastgeledir, ancak projeye özeldir.
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UserSecretsId>79a3edd0-2092-40a2-a04d-dcb46d5ca9ed</UserSecretsId>
</PropertyGroup>
Bu Visual Studio, giriş menüsünde projeye sağ Çözüm Gezgini ve bağlam menüsünden Kullanıcı Gizli Dizilerini Yönet'i seçin. Bu hareket, UserSecretsId proje dosyasına GUID ile doldurulmuş bir öğe ekler.
Gizli dizi ayarlama
Bir anahtardan ve değerinden oluşan bir uygulama gizli anahtarı tanımlayın. Gizli değer, projenin değeriyle UserSecretsId ilişkilendirildi. Örneğin, proje dosyasının mevcut olduğu dizinden aşağıdaki komutu çalıştırın:
dotnet user-secrets set "Movies:ServiceApiKey" "12345"
Yukarıdaki örnekte, iki nokta üst üste özelliğine Movies sahip bir nesne değişmez değeri olduğunu ServiceApiKey gösterir.
Gizli Dizin Yöneticisi aracı diğer dizinlerden de kullanılabilir. Proje --project dosyasının mevcut olduğu dosya sistemi yolunu sağlamak için seçeneğini kullanın. Örnek:
dotnet user-secrets set "Movies:ServiceApiKey" "12345" --project "C:\apps\WebApp1\src\WebApp1"
Visual Studio'de JSON yapısı düz Visual Studio
Visual Studio Gizli Dizileri Yönet hareketi metin düzenleyicisinde secrets.json dosyasını açar. secrets.json içeriğini depolanmış anahtar-değer çiftleriyle değiştirin. Örnek:
{
"Movies": {
"ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"ServiceApiKey": "12345"
}
}
veya aracılığıyla yapılan değişikliklerden sonra JSON yapısı dotnet user-secrets remove dotnet user-secrets set düzdür. Örneğin, çalıştırma dotnet user-secrets remove "Movies:ConnectionString" nesne değişmez Movies sabiti daraltıyor. Değiştirilen dosya aşağıdaki JSON'a benzer:
{
"Movies:ServiceApiKey": "12345"
}
Birden çok gizli dizi ayarlama
JSON komutuna çalıştırarak bir dizi gizli dizi set ayar olabilir. Aşağıdaki örnekte input.json dosyasının içeriği komutuna set yöneltildi.
Bir komut kabuğu açın ve aşağıdaki komutu yürütün:
type .\input.json | dotnet user-secrets set
Gizli bilgilere erişme
Gizli bir gizli koda erişmek için aşağıdaki adımları tamamlayın:
- Kullanıcı gizli dizileri yapılandırma kaynağını kaydetme
- Yapılandırma API'si aracılığıyla gizli anahtarı okuma
Kullanıcı gizli dizileri yapılandırma kaynağını kaydetme
Kullanıcı gizli dizileri yapılandırma sağlayıcısı uygun yapılandırma kaynağını .NET Yapılandırma API'sini ile kaydedmektedir.
ASP.NET Core yeni veya yeni bir Visual Studio web uygulamaları oluşturmak için aşağıdaki kodu oluşturun:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
WebApplication.CreateBuilder önceden yapılandırılmış varsayılanlarla WebApplicationBuilder sınıfının yeni bir örneğini başlatıyor. başlatılan ( WebApplicationBuilder builder ) varsayılan yapılandırmayı sağlar ve AddUserSecrets olduğunda EnvironmentName çağrılarını Development sağlar:
Yapılandırma API'si aracılığıyla gizli anahtarı okuma
Anahtarı okumak için aşağıdaki örnekleri Movies:ServiceApiKey düşünün:
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'de yapılandırma.
Gizli dizileri POCO ile eşleme
Nesne değişmez sabitinin tamamını poCO ile eşlemek (özelliklere sahip basit bir .NET sınıfı) ilgili özellikleri toplamada yararlıdır.
Uygulamanın dosyasındaki secrets.jsaşağıdaki iki gizli diziyi içerdiğini varsayalım:
{
"Movies": {
"ServiceApiKey": "12345",
"ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Önceki gizli dizileri poCO ile eşlemek için .NET Yapılandırma API'sini nesne grafı bağlama özelliğini kullanın. Aşağıdaki kod özel bir MovieSettings POCO'ya bağlar ve özellik ServiceApiKey değerine erişer:
var moviesConfig =
Configuration.GetSection("Movies").Get<MovieSettings>();
_moviesApiKey = moviesConfig.ServiceApiKey;
ve Movies:ConnectionString Movies:ServiceApiKey gizli dizileri, içinde ilgili özelliklere MovieSettings eşlenmiş:
public class MovieSettings
{
public string ConnectionString { get; set; }
public string ServiceApiKey { get; set; }
}
Gizli dizilerle dize değiştirme
Parolaları düz metin olarak depolamak güvenli değil. Örneğin, içinde depolanan bir veritabanı bağlantı appsettings.json dizesi, belirtilen kullanıcı için bir parola içerebilir:
{
"ConnectionStrings": {
"Movies": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;User Id=johndoe;Password=pass123;MultipleActiveResultSets=true"
}
}
Parolayı gizli olarak depolamak daha güvenli bir yaklaşımdır. Örnek:
dotnet user-secrets set "DbPassword" "pass123"
Passwordanahtar-değer çiftini içinde bağlantı dizesinden appsettings.json kaldırın. Örnek:
{
"ConnectionStrings": {
"Movies": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;User Id=johndoe;MultipleActiveResultSets=true"
}
}
Gizli dizi değeri, SqlConnectionStringBuilder Password bağlantı dizesinin tamamlanabilmesi için bir nesnenin özelliğinde ayarlanabilir:
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();
Gizli dizileri listeleyin
Uygulamanın dosyasındaki secrets.jsaşağıdaki iki gizli diziyi içerdiğini varsayalım:
{
"Movies": {
"ServiceApiKey": "12345",
"ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
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 bir iki nokta üst üste gizli dizi. JSON içindeki nesne hiyerarşisini gösterir.
Tek bir parolayı kaldır
Uygulamanın dosyasındaki secrets.jsaşağıdaki iki gizli diziyi içerdiğini varsayalım:
{
"Movies": {
"ServiceApiKey": "12345",
"ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Proje dosyasının bulunduğu dizinden aşağıdaki komutu çalıştırın:
dotnet user-secrets remove "Movies:ConnectionString"
Bu anahtarla ilişkili anahtar-değer çiftini kaldırmak için uygulamanın gizli dizi. JSON dosyası değiştirildi MoviesConnectionString :
{
"Movies": {
"ServiceApiKey": "12345"
}
}
dotnet user-secrets list Aşağıdaki iletiyi görüntüler:
Movies:ServiceApiKey = 12345
Tüm gizli dizileri kaldır
Uygulamanın dosyasındaki secrets.jsaşağıdaki iki gizli diziyi içerdiğini varsayalım:
{
"Movies": {
"ServiceApiKey": "12345",
"ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
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, gizlilikler. JSON dosyasından silindi:
{}
Çalıştıran dotnet user-secrets list aşağıdaki iletiyi görüntüler:
No secrets configured for this application.
Visual Studio ile Kullanıcı gizli dizilerini yönetme
Visual Studio 'de kullanıcı gizli dizilerini yönetmek için çözüm gezgini 'nde projeye sağ tıklayın ve kullanıcı parolalarını yönet' i seçin:

Ek kaynaklar
- IIS 'deki Kullanıcı gizli bilgilerine erişme hakkında bilgi için Bu soruna bakın.
- ASP.NET Core'de yapılandırma
- ASP.NET Core Azure Key Vault yapılandırma sağlayıcısı
Rick Anderson, Kirk larkabağı, Daniel Rothve Scott Ade
Örnek kodu görüntüleme veya indirme (nasıl indirileceği)
bu belgede, bir geliştirme makinesindeki ASP.NET Core uygulaması için hassas verilerin nasıl yönetileceği açıklanmaktadır. Kaynak kodunda parolaları veya diğer hassas verileri hiçbir şekilde depolamayin. Üretim gizli dizileri geliştirme veya test için kullanılmamalıdır. Gizli dizileri uygulamayla birlikte dağıtılmamalıdır. Bunun yerine, üretim gizli dizileri, ortam değişkenleri veya Azure Key Vault gibi denetimli bir yöntemle erişilmelidir. Azure Key Vault yapılandırma sağlayıcısıylaAzure test ve üretim gizli dizilerini saklayabilir ve koruyabilirsiniz.
Ortam değişkenleri
Ortam değişkenleri, kodda veya yerel yapılandırma dosyalarında uygulama gizli dizileri 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. Varsayılan bir veritabanı bağlantı dizesi, appsettings.json anahtar ile projenin dosyasına dahildir DefaultConnection . Varsayılan bağlantı dizesi, kullanıcı modunda çalışan ve parola gerektirmeyen LocalDB içindir. Uygulama dağıtımı sırasında, DefaultConnection anahtar değeri bir ortam değişkeninin değeri ile geçersiz kılınabilir. Ortam değişkeni, tüm bağlantı dizesini hassas kimlik bilgileriyle saklayabilir.
Uyarı
Ortam değişkenleri genellikle düz, şifresiz metin olarak depolanır. Makinenin veya işlemin güvenliği tehlikeye atılırsa, ortam değişkenlerine güvenilmeyen taraflar tarafından erişilebilir. Kullanıcı gizliliklerinin açıklanmasını önlemeye yönelik ek ölçüler gerekebilir.
Ayırıcı, : tüm platformlarda ortam değişkeni hiyerarşik anahtarlarla birlikte çalışmaz. __çift alt çizgi şöyledir:
- Tüm platformlar tarafından de destekler. Örneğin,
:ayıracı Bash tarafından desteklanmaz,ancak__bu şekildedir. - Otomatik olarak bir ile değiştirilir
:
Gizli dizi Yöneticisi
gizli verileri bir ASP.NET Core projesi geliştirme sırasında depolar. Bu bağlamda, önemli bir veri parçası bir uygulama gizli dizisi. Uygulama gizli dizileri, proje ağacından ayrı bir konumda depolanır. Uygulama gizli dizileri belirli bir projeyle ilişkilendirilir veya çeşitli projeler arasında paylaşılır. Uygulama gizli dizileri kaynak denetimine iade edilmedi.
Uyarı
Gizli dizi Yöneticisi aracı depolanan gizli dizileri şifrelemez ve güvenilir bir depo olarak değerlendirilmemelidir. Yalnızca geliştirme amaçlıdır. Anahtarlar ve değerler, Kullanıcı profili dizinindeki bir JSON yapılandırma dosyasında depolanır.
Gizli dizi Yöneticisi aracı nasıl kullanılı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ünde bir JSON dosyasında depolanır:
Dosya sistemi yolu:
%APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json
Yukarıdaki dosya yollarında, öğesini <user_secrets_id> UserSecretsId Proje dosyasında belirtilen değerle değiştirin.
Gizli dizi yöneticisi aracıyla kaydedilen verilerin konumuna veya biçimine bağlı olarak kod yazma. Bu uygulama ayrıntıları değişebilir. Örneğin, gizli değerler şifrelenmez, ancak gelecekte olabilir.
Gizli depolamayı etkinleştir
Gizli dizi Yöneticisi Aracı, Kullanıcı profilinizde depolanan projeye özgü yapılandırma ayarları üzerinde çalışır.
Gizli dizi Yöneticisi Aracı, init .NET Core SDK 3.0.100 veya sonraki sürümlerde bir komut içerir. Kullanıcı gizli dizilerini kullanmak için, proje dizininde aşağıdaki komutu çalıştırın:
dotnet user-secrets init
Önceki komut, UserSecretsId Proje dosyasının içindeki bir öğesi ekler PropertyGroup . Varsayılan olarak, iç metni UserSecretsId BIR GUID 'dir. İç metin rastgele, ancak proje için benzersizdir.
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UserSecretsId>79a3edd0-2092-40a2-a04d-dcb46d5ca9ed</UserSecretsId>
</PropertyGroup>
Visual Studio, Çözüm Gezgini projeye sağ tıklayın ve bağlam menüsünden kullanıcı gizli dizilerini yönet ' i seçin. Bu hareket UserSecretsId , proje dosyasına BIR GUID ile doldurulmuş bir öğe ekler.
Gizli dizi ayarla
Anahtar ve değerini içeren bir uygulama gizli anahtarı tanımlayın. Gizli dizi, projenin değeri ile ilişkilendirilir UserSecretsId . Örneğin, proje dosyasının bulunduğu dizinden aşağıdaki komutu çalıştırın:
dotnet user-secrets set "Movies:ServiceApiKey" "12345"
Yukarıdaki örnekte, iki nokta üst üste Movies bir özelliği olan bir nesne sabit değeri olduğunu gösterir ServiceApiKey .
Gizli dizi Yöneticisi Aracı diğer dizinlerden de kullanılabilir. --projectProje dosyasının bulunduğu dosya sistemi yolunu sağlamak için seçeneğini kullanın. Örnek:
dotnet user-secrets set "Movies:ServiceApiKey" "12345" --project "C:\apps\WebApp1\src\WebApp1"
Visual Studio JSON yapısı düzleştirme
Visual Studio kullanıcı gizli dizilerini yönet hareketi metin düzenleyicisinde bir gizli dizi. json dosyası açar. Gizlilikler. JSON içeriğini depolanacak anahtar-değer çiftleriyle değiştirin. Örnek:
{
"Movies": {
"ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"ServiceApiKey": "12345"
}
}
JSON yapısı, veya ile yapılan değişikliklerden sonra düzleştirilir dotnet user-secrets remove dotnet user-secrets set . Örneğin, çalışıyor dotnet user-secrets remove "Movies:ConnectionString" Movies nesne değişmez değerini daraltır. Değiştirilen dosya aşağıdaki JSON 'a benzer:
{
"Movies:ServiceApiKey": "12345"
}
Birden çok gizli dizi ayarla
Bir dizi gizli dizi, JSON ile komutuna ayırarak ayarlanabilir set . Aşağıdaki örnekte, input. JSON dosyasının içeriği komutuna yöneldir set .
Bir komut kabuğu açın ve şu komutu yürütün:
type .\input.json | dotnet user-secrets set
Gizli dizi erişimi
Gizli dizi erişmek için aşağıdaki adımları izleyin:
- Kullanıcı parolaları yapılandırma kaynağını Kaydet
- Yapılandırma API 'SI aracılığıyla gizli anahtarı okuyun
Kullanıcı parolaları yapılandırma kaynağını Kaydet
Kullanıcı gizli dizileri yapılandırma sağlayıcısı uygun yapılandırma kaynağını .net Yapılandırma API 'sinekaydeder.
Kullanıcı gizli dizileri yapılandırma kaynağı, proje çağırdığında geliştirme moduna otomatik olarak eklenir CreateDefaultBuilder . CreateDefaultBuilderAddUserSecretsŞu olduğunda çağırır EnvironmentName Development :
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
CreateDefaultBuilderÇağrılmıyorsa, ' de çağırarak Kullanıcı gizli dizi yapılandırma kaynağını açıkça ekleyin AddUserSecrets ConfigureAppConfiguration . AddUserSecretsAşağıdaki örnekte gösterildiği gibi, yalnızca uygulama geliştirme ortamında çalıştırıldığında çağırın:
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 'SI aracılığıyla gizli anahtarı 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. Anahtarı okurken aşağıdaki örnekleri göz önünde bulundurun Movies:ServiceApiKey :
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 sayfası 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. sayfalarda erişim yapılandırması ve erişim yapılandırması. Razor
Gizli dizileri bir POCO ile eşleme
Bir nesne sabit değerinin tamamını bir POCO 'ya eşleme (özelliklerle basit bir .NET sınıfı) ilgili özellikleri toplamak için faydalıdır.
Uygulamanın dosyasındaki secrets.jsaşağıdaki iki gizli diziyi içerdiğini varsayalım:
{
"Movies": {
"ServiceApiKey": "12345",
"ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Önceki gizli dizileri bir POCO 'ya eşlemek için .NET yapılandırma API 'sinin nesne grafiği bağlama özelliğini kullanın. Aşağıdaki kod, özel bir MovieSettings poco 'a bağlanır ve ServiceApiKey özellik değerine erişir:
var moviesConfig =
Configuration.GetSection("Movies").Get<MovieSettings>();
_moviesApiKey = moviesConfig.ServiceApiKey;
Movies:ConnectionStringVe gizli dizileri, Movies:ServiceApiKey içindeki ilgili özelliklerle eşlenir MovieSettings :
public class MovieSettings
{
public string ConnectionString { get; set; }
public string ServiceApiKey { get; set; }
}
Gizli dizileri olan dize değiştirme
Parolaların düz metin olarak depolanması güvenli değildir. Örneğin, içinde depolanan bir veritabanı bağlantı dizesi, appsettings.json belirtilen kullanıcı için bir parola içerebilir:
{
"ConnectionStrings": {
"Movies": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;User Id=johndoe;Password=pass123;MultipleActiveResultSets=true"
}
}
Daha güvenli bir yaklaşım, parolayı gizli olarak depolanmalıdır. Örnek:
dotnet user-secrets set "DbPassword" "pass123"
PasswordAnahtar-değer çiftini içindeki bağlantı dizesinden kaldırın appsettings.json . Örnek:
{
"ConnectionStrings": {
"Movies": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;User Id=johndoe;MultipleActiveResultSets=true"
}
}
Gizli dizi değeri, SqlConnectionStringBuilder Password bağlantı dizesinin tamamlanabilmesi için bir nesnenin özelliğinde ayarlanabilir:
public class Startup
{
private string _connection = null;
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
var builder = new SqlConnectionStringBuilder(
Configuration.GetConnectionString("Movies"));
builder.Password = Configuration["DbPassword"];
_connection = builder.ConnectionString;
// code omitted for brevity
}
public void Configure(IApplicationBuilder app)
{
app.Run(async (context) =>
{
await context.Response.WriteAsync($"DB Connection: {_connection}");
});
}
}
Gizli dizileri listeleyin
Uygulamanın dosyasındaki secrets.jsaşağıdaki iki gizli diziyi içerdiğini varsayalım:
{
"Movies": {
"ServiceApiKey": "12345",
"ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
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 bir iki nokta üst üste gizli dizi. JSON içindeki nesne hiyerarşisini gösterir.
Tek bir parolayı kaldır
Uygulamanın dosyasındaki secrets.jsaşağıdaki iki gizli diziyi içerdiğini varsayalım:
{
"Movies": {
"ServiceApiKey": "12345",
"ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
Proje dosyasının bulunduğu dizinden aşağıdaki komutu çalıştırın:
dotnet user-secrets remove "Movies:ConnectionString"
Bu anahtarla ilişkili anahtar-değer çiftini kaldırmak için uygulamanın gizli dizi. JSON dosyası değiştirildi MoviesConnectionString :
{
"Movies": {
"ServiceApiKey": "12345"
}
}
dotnet user-secrets list Aşağıdaki iletiyi görüntüler:
Movies:ServiceApiKey = 12345
Tüm gizli dizileri kaldır
Uygulamanın dosyasındaki secrets.jsaşağıdaki iki gizli diziyi içerdiğini varsayalım:
{
"Movies": {
"ServiceApiKey": "12345",
"ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
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, gizlilikler. JSON dosyasından silindi:
{}
Çalıştıran dotnet user-secrets list aşağıdaki iletiyi görüntüler:
No secrets configured for this application.
Visual Studio ile Kullanıcı gizli dizilerini yönetme
Visual Studio 'de kullanıcı gizli dizilerini yönetmek için çözüm gezgini 'nde projeye sağ tıklayın ve kullanıcı parolalarını yönet' i seçin:

Ek kaynaklar
- IIS 'deki Kullanıcı gizli bilgilerine erişme hakkında bilgi için Bu soruna bakın.
- ASP.NET Core'de yapılandırma
- ASP.NET Core Azure Key Vault yapılandırma sağlayıcısı