Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Note
Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.
Warning
A ASP.NET Core ezen verziója már nem támogatott. További információt a .NET és a .NET Core támogatási szabályzatában talál. A jelen cikk .NET 9-es verzióját lásd az aktuális kiadásért .
Mintakód megtekintése vagy letöltése (hogyan töltsd le)
Ez a cikk azt ismerteti, hogyan kezelheti a ASP.NET Core-alkalmazások bizalmas adatait egy fejlesztői gépen. Soha ne tároljon jelszavakat vagy más bizalmas adatokat forráskódban vagy konfigurációs fájlokban. A gyártási titkokat nem szabad fejlesztésre vagy tesztelésre használni. Titkokat nem szabad üzembe helyezni az alkalmazással együtt. A gyártási titkokhoz egy kontrollált módon kell hozzáférni, mint például az Azure Key Vault. Az Azure-teszt- és éles titkos kódok az Azure Key Vault konfigurációszolgáltatójával tárolhatók és védhetők.
Az üzembe helyezett teszt- és éles alkalmazások hitelesítéséről további információt Biztonságos hitelesítési folyamatokcímű témakörben talál.
Ha felhasználói titkos kódokat szeretne használni egy .NET-konzolalkalmazásban, tekintse meg ezt a GitHub-problémát.
Környezeti változók
A környezeti változók az alkalmazáskulcsok kódban vagy helyi konfigurációs fájlokban való tárolásának elkerülésére szolgálnak. A környezeti változók felülbírálják az összes korábban megadott konfigurációs forrás konfigurációs értékeit.
Fontolja meg egy ASP.NET Core-webalkalmazást, amelyben engedélyezve van az egyéni fiókok biztonsága. Egy alapértelmezett adatbázis-kapcsolati sztring szerepel a projekt fájljában appsettings.json a kulccsal DefaultConnection. Az alapértelmezett kapcsolati sztring a LocalDB-hez tartozik, amely felhasználói módban fut, és nem igényel jelszót. Az alkalmazás üzembe helyezése során a DefaultConnection kulcsérték felülírható egy környezeti változó értékével. A környezeti változó a teljes kapcsolati sztringet bizalmas hitelesítő adatokkal tárolhatja.
Warning
A környezeti változók általában egyszerű, titkosítatlan szövegben vannak tárolva. Ha a gép vagy a folyamat sérült, a környezeti változókat nem megbízható felek érhetik el. További intézkedésekre lehet szükség a felhasználói titkos kódok felfedésének megakadályozására.
A : elválasztó nem működik a környezeti változók hierarchikus kulcsaival minden platformon. A : elválasztójel például nem elérhető a Bash-ban. A dupla aláhúzás, __, a következő:
- Minden platform támogatja.
- Automatikusan kicserélődik egy kettősponttal,
:.
Titkos kulcskezelő
A Secret Manager eszköz bizalmas adatokat tárol az alkalmazásfejlesztés során. Ebben az összefüggésben a bizalmas adatok egy része alkalmazástitkos. Az alkalmazás titkos kulcsainak tárolása a projektfától eltérő helyen történik. Az alkalmazás titkos kódjai egy adott projekthez vannak társítva, vagy több projektben vannak megosztva. Az alkalmazás titkos kulcsai nincsenek beadva a forrásvezérlőbe.
Warning
A Secret Manager eszköz nem titkosítja a tárolt titkos kulcsokat, és nem kell megbízható tárolóként kezelni. Csak fejlesztési célokat szolgál. A kulcsok és értékek egy JSON-konfigurációs fájlban vannak tárolva a felhasználói profil könyvtárában.
A Secret Manager eszköz működése
A Secret Manager eszköz elrejti a megvalósítás részleteit, például az értékek tárolásának helyét és módját. Az eszközt anélkül használhatja, hogy ismerné ezeket a megvalósítási részleteket. Az értékek egy JSON-fájlban vannak tárolva a helyi gép felhasználói profilmappájában:
Fájlrendszer elérési útja:
%APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json
Az előző fájl elérési útjaiban cserélje le <user_secrets_id> a UserSecretsId projektfájlban megadott értékre.
Ne írjon olyan kódot, amely a Secret Manager eszközzel mentett adatok helyétől vagy formátumától függ. Ezek a megvalósítás részletei változhatnak. A titkos értékek például nincsenek titkosítva.
Titkos kulcsok tárolásának engedélyezése
A Secret Manager eszköz a felhasználói profilban tárolt projektspecifikus konfigurációs beállításokon működik.
A parancssori felület (CLI) használata
A Secret Manager eszköz tartalmaz egy parancsot init . A felhasználói titkos kódok használatához futtassa a következő parancsot a projektkönyvtárban:
dotnet user-secrets init
Az előző parancs hozzáad egy UserSecretsId elemet a projektfájlhoz PropertyGroup . Alapértelmezés szerint a UserSecretsId belső szövege egy GUID. A belső szöveg tetszőleges, de egyedi a projektben.
A Visual Studio használata
A Visual Studióban kattintson a jobb gombbal a projektre a Megoldáskezelőben, és válassza a Helyi menü Felhasználói titkos kulcsok kezelése parancsát . Ez a kézmozdulat egy UserSecretsId GUID azonosítóval kitöltött elemet ad hozzá a projektfájlhoz.
Ha GenerateAssemblyInfofalse
Ha a szerelvényinformációs attribútumok létrehozása le van tiltva, manuálisan adja hozzá a UserSecretsIdAttribute a(z) AssemblyInfo.cs részben. Például:
[assembly: UserSecretsId("your_user_secrets_id")]
Ha manuálisan adja hozzá az UserSecretsId attribútumot AssemblyInfo.cs, az UserSecretsId értéknek meg kell egyeznie a projektfájlban lévő értékkel.
Titkos kód beállítása
Egy kulcsból és annak értékéből álló alkalmazástitkot definiálhat. A titkos kód a projekt értékéhez UserSecretsId van társítva. Futtassa például a következő parancsot abból a könyvtárból, amelyben a projektfájl létezik:
dotnet user-secrets set "Movies:ServiceApiKey" "12345"
Az előző példában a kettőspont azt jelzi, hogy Movies egy objektumkonstans egy ServiceApiKey tulajdonsággal.
A Secret Manager eszköz más könyvtárakból is használható.
--project A beállítással megadhatja a fájlrendszer elérési útját, ahol a projektfájl létezik. Például:
dotnet user-secrets set "Movies:ServiceApiKey" "12345" --project "C:\apps\WebApp1\src\WebApp1"
JSON-struktúra simítása a Visual Studióban
A Visual Studio Felhasználói titkos kódok kezelése kézmozdulata megnyit egy secrets.json fájlt a szövegszerkesztőben. A secrets.json tartalmát cserélje le a tárolandó kulcs-érték párokra. Például:
{
"Movies": {
"ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"ServiceApiKey": "12345"
}
}
A JSON-struktúra lapítva van a módosítások után a dotnet user-secrets remove vagy dotnet user-secrets set használatakor. A dotnet user-secrets remove "Movies:ConnectionString" futtatása például összecsukja az objektumliterált Movies. A módosított fájl a következő JSON-fájlhoz hasonlít:
{
"Movies:ServiceApiKey": "12345"
}
Több titkos kulcs beállítása
A titkos kódok kötegét úgy állíthatja be, hogy a JSON-t a set parancsra irányítja. Az alábbi példában a input.json fájl tartalma a set parancsba van irányítva.
Nyisson meg egy parancshéjat, és hajtsa végre a következő parancsot:
type .\input.json | dotnet user-secrets set
Hozzáférés egy titokhoz
Egy titkos kód eléréséhez hajtsa végre a következő lépéseket:
- A felhasználói titkos kódok konfigurációs forrásának regisztrálása
- A titkos kód beolvasása a Configuration API-val
A felhasználói titkos kódok konfigurációs forrásának regisztrálása
A felhasználói titkos kódok konfigurációszolgáltatója regisztrálja a megfelelő konfigurációs forrást a .NET Configuration API-val.
ASP.NET Dotnet New vagy Visual Studio használatával létrehozott alapvető webalkalmazások a következő kódot hozzák létre:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
WebApplication.CreateBuilder inicializálja a WebApplicationBuilder osztály új példányát előre konfigurált alapértelmezett beállításokkal. Az inicializált WebApplicationBuilder (builder) alapértelmezett konfigurációt biztosít, és AddUserSecrets hív, amikor a EnvironmentNameDevelopment.
A titkos kód beolvasása a Configuration API-val
Vegye figyelembe a kulcs olvasására vonatkozó alábbi példákat Movies:ServiceApiKey :
Program.cs fájl:
var builder = WebApplication.CreateBuilder(args);
var movieApiKey = builder.Configuration["Movies:ServiceApiKey"];
var app = builder.Build();
app.MapGet("/", () => movieApiKey);
app.Run();
Razor Oldalak oldalak modellje:
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
}
}
További információkért lásd: Konfiguráció az ASP.NET Core-ben.
Titkos kódok leképezése POCO-ra
A teljes objektum literálját POCO-ra (egyszerű .NET-osztály tulajdonságokkal) való leképezés hasznos lehet a kapcsolódó tulajdonságok összesítéséhez.
Tegyük fel, hogy az alkalmazás fájlja secrets.json a következő két titkos kódot tartalmazza:
{
"Movies:ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"Movies:ServiceApiKey": "12345"
}
Az előző titkos kódok POCO-ra való leképezéséhez használja a .NET Configuration API objektumgráf-kötési funkcióját. A következő kód egy egyéni MovieSettings POCO-hoz kapcsolódik, és hozzáfér a ServiceApiKey tulajdonságértékhez:
var moviesConfig =
Configuration.GetSection("Movies").Get<MovieSettings>();
_moviesApiKey = moviesConfig.ServiceApiKey;
A Movies:ConnectionString és Movies:ServiceApiKey titkok a MovieSettings megfelelő tulajdonságaira vannak leképezve.
public class MovieSettings
{
public string ConnectionString { get; set; }
public string ServiceApiKey { get; set; }
}
Sztring cseréje titkos kódokkal
A jelszavak egyszerű szövegben való tárolása nem biztonságos. Soha ne tároljon titkokat olyan konfigurációs fájlban, mint például appsettings.json, amely bekerülhet a forráskód-tárba.
A tárolt appsettings.json adatbázis-kapcsolati sztringek például nem tartalmazhatnak jelszót. Ehelyett tárolja a jelszót titokként, és futtatáskor adja meg a jelszót a kapcsolati sztringben. Például:
dotnet user-secrets set "DbPassword" "`<secret value>`"
Cserélje le az <secret value> előző példában szereplő helyőrzőt a jelszó értékére. Állítsa be a titkos kód értékét egy objektum tulajdonságán SqlConnectionStringBuilder úgy, hogy az a kapcsolati sztringben Password jelszóértékként szerepeljen:
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();
Titkos kódok listázása
Tegyük fel, hogy az alkalmazás fájlja secrets.json a következő két titkos kódot tartalmazza:
{
"Movies:ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"Movies:ServiceApiKey": "12345"
}
Futtassa a következő parancsot abból a könyvtárból, amelyben a projektfájl létezik:
dotnet user-secrets list
A következő kimenet jelenik meg:
Movies:ConnectionString = Server=(localdb)\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true
Movies:ServiceApiKey = 12345
Az előző példában a kulcsnevekben lévő kettőspont a benne lévő secrets.jsonobjektumhierarchiát jelöli.
Egyetlen titkos kód eltávolítása
Tegyük fel, hogy az alkalmazás fájlja secrets.json a következő két titkos kódot tartalmazza:
{
"Movies:ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"Movies:ServiceApiKey": "12345"
}
Futtassa a következő parancsot abból a könyvtárból, amelyben a projektfájl létezik:
dotnet user-secrets remove "Movies:ConnectionString"
Az alkalmazás secrets.json fájlját úgy módosítottuk, hogy eltávolítsuk a Movies:ConnectionString kulcshoz társított kulcs-érték párot.
{
"Movies": {
"ServiceApiKey": "12345"
}
}
dotnet user-secrets list a következő üzenetet jeleníti meg:
Movies:ServiceApiKey = 12345
Az összes titkos kód eltávolítása
Tegyük fel, hogy az alkalmazás fájlja secrets.json a következő két titkos kódot tartalmazza:
{
"Movies:ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"Movies:ServiceApiKey": "12345"
}
Futtassa a következő parancsot abból a könyvtárból, amelyben a projektfájl létezik:
dotnet user-secrets clear
Az alkalmazás összes felhasználói titkos kódját törölték a secrets.json fájlból:
{}
A futtatás dotnet user-secrets list a következő üzenetet jeleníti meg:
No secrets configured for this application.
Felhasználói titkos kódok kezelése a Visual Studióval
A Visual Studióban a felhasználói titkos kódok kezeléséhez kattintson a jobb gombbal a projektre a megoldáskezelőben, és válassza a Felhasználói titkos kódok kezelése lehetőséget:
Felhasználói titkos kódok migrálása ASP.NET-keretrendszerből ASP.NET Core-ba
Lásd ezt a GitHub-hibajegyet.
Felhasználói titkos kódok nem webes alkalmazásokban
A megcélzott Microsoft.NET.Sdk.Web projektek automatikusan támogatják a felhasználói titkos kulcsokat. Azoknál a projekteknél, amelyek Microsoft.NET.Sdk-et céloznak meg, például konzolalkalmazások esetében, telepítse kifejezetten a konfigurációs bővítményt és a felhasználói titkos NuGet-csomagokat.
A PowerShell használata:
Install-Package Microsoft.Extensions.Configuration
Install-Package Microsoft.Extensions.Configuration.UserSecrets
A .NET parancssori felületének használata:
dotnet add package Microsoft.Extensions.Configuration
dotnet add package Microsoft.Extensions.Configuration.UserSecrets
A csomagok telepítése után inicializálja a projektet , és állítsa be a titkos kulcsokat ugyanúgy, mint egy webalkalmazás esetében. Az alábbi példa egy konzolalkalmazást mutat be, amely lekéri az "AppSecret" kulccsal beállított titkos kód értékét:
using Microsoft.Extensions.Configuration;
namespace ConsoleApp;
class Program
{
static void Main(string[] args)
{
IConfigurationRoot config = new ConfigurationBuilder()
.AddUserSecrets<Program>()
.Build();
Console.WriteLine(config["AppSecret"]);
}
}
További erőforrások
- A felhasználói titkos kódok IIS-ből való elérésére vonatkozó információkért tekintse meg ezt a problémát és ezt a problémát .
- Az ASP.NET Core konfigurációja
- Azure Key Vault-konfigurációszolgáltató a ASP.NET Core-ban
Készítette: Rick Anderson, Kirk Larkin, Daniel Roth és Scott Addie
Mintakód megtekintése vagy letöltése (hogyan töltsd le)
Ez a cikk azt ismerteti, hogyan kezelheti a ASP.NET Core-alkalmazások bizalmas adatait egy fejlesztői gépen. Soha ne tároljon jelszavakat vagy más bizalmas adatokat forráskódban vagy konfigurációs fájlokban. A gyártási titkokat nem szabad fejlesztésre vagy tesztelésre használni. Titkokat nem szabad üzembe helyezni az alkalmazással együtt. A gyártási titkokhoz egy kontrollált módon kell hozzáférni, mint például az Azure Key Vault. Az Azure-teszt- és éles titkos kódok az Azure Key Vault konfigurációszolgáltatójával tárolhatók és védhetők.
A tesztelési és éles környezetek hitelesítéséről további információt a Biztonságos hitelesítési folyamatok című témakörben talál.
Környezeti változók
A környezeti változók az alkalmazáskulcsok kódban vagy helyi konfigurációs fájlokban való tárolásának elkerülésére szolgálnak. A környezeti változók felülbírálják az összes korábban megadott konfigurációs forrás konfigurációs értékeit.
Fontolja meg egy ASP.NET Core-webalkalmazást, amelyben engedélyezve van az egyéni felhasználói fiókok biztonsága. Egy alapértelmezett adatbázis-kapcsolati sztring szerepel a projekt fájljában appsettings.json a kulccsal DefaultConnection. Az alapértelmezett kapcsolati sztring a LocalDB-hez tartozik, amely felhasználói módban fut, és nem igényel jelszót. Az alkalmazás üzembe helyezése során a DefaultConnection kulcsérték felülírható egy környezeti változó értékével. A környezeti változó a teljes kapcsolati sztringet bizalmas hitelesítő adatokkal tárolhatja.
Warning
A környezeti változók általában egyszerű, titkosítatlan szövegben vannak tárolva. Ha a gép vagy a folyamat sérült, a környezeti változókat nem megbízható felek érhetik el. További intézkedésekre lehet szükség a felhasználói titkos kódok felfedésének megakadályozására.
A : elválasztó nem működik a környezeti változók hierarchikus kulcsaival minden platformon. A : elválasztójel például nem elérhető a Bash-ban. A dupla aláhúzás, __, a következő:
- Minden platform támogatja.
- Automatikusan kicserélődik egy kettősponttal,
:.
Titkos kulcskezelő
A Secret Manager eszköz bizalmas adatokat tárol az alkalmazásfejlesztés során. Ebben az összefüggésben a bizalmas adatok egy része alkalmazástitkos. Az alkalmazás titkos kulcsainak tárolása a projektfától eltérő helyen történik. Az alkalmazás titkos kódjai egy adott projekthez vannak társítva, vagy több projektben vannak megosztva. Az alkalmazás titkos kulcsai nincsenek beadva a forrásvezérlőbe.
Warning
A Secret Manager eszköz nem titkosítja a tárolt titkos kulcsokat, és nem kell megbízható tárolóként kezelni. Csak fejlesztési célokat szolgál. A kulcsok és értékek egy JSON-konfigurációs fájlban vannak tárolva a felhasználói profil könyvtárában.
A Secret Manager eszköz működése
A Secret Manager eszköz elrejti a megvalósítás részleteit, például az értékek tárolásának helyét és módját. Az eszközt anélkül használhatja, hogy ismerné ezeket a megvalósítási részleteket. Az értékek egy JSON-fájlban vannak tárolva a helyi gép felhasználói profilmappájában:
Fájlrendszer elérési útja:
%APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json
Az előző fájl elérési útjaiban cserélje le <user_secrets_id> a UserSecretsId projektfájlban megadott értékre.
Ne írjon olyan kódot, amely a Secret Manager eszközzel mentett adatok helyétől vagy formátumától függ. Ezek a megvalósítás részletei változhatnak. A titkos értékek például nem titkosítottak, de a jövőben is lehetnek.
Titkos kulcsok tárolásának engedélyezése
A Secret Manager eszköz a felhasználói profilban tárolt projektspecifikus konfigurációs beállításokon működik.
A Secret Manager eszköz tartalmaz egy init parancsot a .NET Core SDK 3.0.100 vagy újabb verziójában. A felhasználói titkos kódok használatához futtassa a következő parancsot a projektkönyvtárban:
dotnet user-secrets init
Az előző parancs hozzáad egy UserSecretsId elemet a projektfájlhoz PropertyGroup . Alapértelmezés szerint a UserSecretsId belső szövege egy GUID. A belső szöveg tetszőleges, de egyedi a projektben.
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UserSecretsId>79a3edd0-2092-40a2-a04d-dcb46d5ca9ed</UserSecretsId>
</PropertyGroup>
A Visual Studióban kattintson a jobb gombbal a projektre a Megoldáskezelőben, és válassza a Helyi menü Felhasználói titkos kulcsok kezelése parancsát . Ez a kézmozdulat egy UserSecretsId GUID azonosítóval kitöltött elemet ad hozzá a projektfájlhoz.
Titkos kód beállítása
Egy kulcsból és annak értékéből álló alkalmazástitkot definiálhat. A titkos kód a projekt értékéhez UserSecretsId van társítva. Futtassa például a következő parancsot abból a könyvtárból, amelyben a projektfájl létezik:
dotnet user-secrets set "Movies:ServiceApiKey" "12345"
Az előző példában a kettőspont azt jelzi, hogy Movies egy objektumkonstans egy ServiceApiKey tulajdonsággal.
A Secret Manager eszköz más könyvtárakból is használható.
--project A beállítással megadhatja a fájlrendszer elérési útját, ahol a projektfájl létezik. Például:
dotnet user-secrets set "Movies:ServiceApiKey" "12345" --project "C:\apps\WebApp1\src\WebApp1"
JSON-struktúra simítása a Visual Studióban
A Visual Studio Felhasználói titkos kódok kezelése kézmozdulata megnyit egy secrets.json fájlt a szövegszerkesztőben. A secrets.json tartalmát cserélje le a tárolandó kulcs-érték párokra. Például:
{
"Movies": {
"ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"ServiceApiKey": "12345"
}
}
A JSON-struktúra lapítva van a módosítások után a dotnet user-secrets remove vagy dotnet user-secrets set használatakor. A dotnet user-secrets remove "Movies:ConnectionString" futtatása például összecsukja az objektumliterált Movies. A módosított fájl a következő JSON-fájlhoz hasonlít:
{
"Movies:ServiceApiKey": "12345"
}
Több titkos kulcs beállítása
A titkos kódok kötegét úgy állíthatja be, hogy a JSON-t a set parancsra irányítja. Az alábbi példában a input.json fájl tartalma a set parancsba van irányítva.
Nyisson meg egy parancshéjat, és hajtsa végre a következő parancsot:
type .\input.json | dotnet user-secrets set
Hozzáférés egy titokhoz
Egy titkos kód eléréséhez hajtsa végre a következő lépéseket:
- A felhasználói titkos kódok konfigurációs forrásának regisztrálása
- A titkos kód beolvasása a Configuration API-val
A felhasználói titkos kódok konfigurációs forrásának regisztrálása
A felhasználói titkos kódok konfigurációszolgáltatója regisztrálja a megfelelő konfigurációs forrást a .NET Configuration API-val.
A rendszer automatikusan hozzáadja a felhasználói titkok konfigurációs forrását a Fejlesztési módban, amikor a projekt meghívja a CreateDefaultBuilder.
CreateDefaultBuilder hívja AddUserSecrets , ha a EnvironmentNameDevelopment van:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Ha CreateDefaultBuilder nincs meghívva, adja hozzá a felhasználói titkok konfigurációs forrását kifejezetten azáltal, hogy meghívja a AddUserSecretsConfigureAppConfiguration parancsot. Csak akkor hívja meg AddUserSecrets, ha az alkalmazás a fejlesztési környezetben fut, ahogy az a következő példában is látható:
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();
}
}
A titkos kód beolvasása a Configuration API-val
Ha a felhasználói titkos kódok konfigurációs forrása regisztrálva van, a .NET Configuration API elolvashatja a titkos kulcsokat.
A konstruktorinjektálás a .NET Configuration API-hoz való hozzáféréshez használható. Vegye figyelembe a kulcs olvasására vonatkozó alábbi példákat Movies:ServiceApiKey :
Indítási osztály:
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 Oldalak oldalak modellje:
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
}
}
További információ: Access konfiguráció a Startupban és Access konfiguráció a Razor Pages-ben.
Titkos kódok leképezése POCO-ra
A teljes objektum literálját POCO-ra (egyszerű .NET-osztály tulajdonságokkal) való leképezés hasznos lehet a kapcsolódó tulajdonságok összesítéséhez.
Tegyük fel, hogy az alkalmazás fájlja secrets.json a következő két titkos kódot tartalmazza:
{
"Movies:ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"Movies:ServiceApiKey": "12345"
}
Az előző titkos kódok POCO-ra való leképezéséhez használja a .NET Configuration API objektumgráf-kötési funkcióját. A következő kód egy egyéni MovieSettings POCO-hoz kapcsolódik, és hozzáfér a ServiceApiKey tulajdonságértékhez:
var moviesConfig =
Configuration.GetSection("Movies").Get<MovieSettings>();
_moviesApiKey = moviesConfig.ServiceApiKey;
A Movies:ConnectionString és Movies:ServiceApiKey titkok a MovieSettings megfelelő tulajdonságaira vannak leképezve.
public class MovieSettings
{
public string ConnectionString { get; set; }
public string ServiceApiKey { get; set; }
}
Sztring cseréje titkos kódokkal
A jelszavak egyszerű szövegben való tárolása nem biztonságos. Soha ne tároljon titkokat olyan konfigurációs fájlban, mint például appsettings.json, amely bekerülhet a forráskód-tárba.
A tárolt appsettings.json adatbázis-kapcsolati sztringek például nem tartalmazhatnak jelszót. Ehelyett tárolja a jelszót titokként, és futtatáskor adja meg a jelszót a kapcsolati sztringben. Például:
dotnet user-secrets set "DbPassword" "<secret value>"
Cserélje le az <secret value> előző példában szereplő helyőrzőt a jelszó értékére. Állítsa be a titkos kód értékét egy objektum tulajdonságán SqlConnectionStringBuilder úgy, hogy az a kapcsolati sztringben Password jelszóértékként szerepeljen:
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();
Titkos kódok listázása
Tegyük fel, hogy az alkalmazás fájlja secrets.json a következő két titkos kódot tartalmazza:
{
"Movies:ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"Movies:ServiceApiKey": "12345"
}
Futtassa a következő parancsot abból a könyvtárból, amelyben a projektfájl létezik:
dotnet user-secrets list
A következő kimenet jelenik meg:
Movies:ConnectionString = Server=(localdb)\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true
Movies:ServiceApiKey = 12345
Az előző példában a kulcsnevekben lévő kettőspont a benne lévő secrets.jsonobjektumhierarchiát jelöli.
Egyetlen titkos kód eltávolítása
Tegyük fel, hogy az alkalmazás fájlja secrets.json a következő két titkos kódot tartalmazza:
{
"Movies:ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"Movies:ServiceApiKey": "12345"
}
Futtassa a következő parancsot abból a könyvtárból, amelyben a projektfájl létezik:
dotnet user-secrets remove "Movies:ConnectionString"
Az alkalmazás secrets.json fájlját úgy módosítottuk, hogy eltávolítsuk a MoviesConnectionString kulcshoz társított kulcs-érték párot.
{
"Movies": {
"ServiceApiKey": "12345"
}
}
dotnet user-secrets list a következő üzenetet jeleníti meg:
Movies:ServiceApiKey = 12345
Az összes titkos kód eltávolítása
Tegyük fel, hogy az alkalmazás fájlja secrets.json a következő két titkos kódot tartalmazza:
{
"Movies:ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;Trusted_Connection=True;MultipleActiveResultSets=true",
"Movies:ServiceApiKey": "12345"
}
Futtassa a következő parancsot abból a könyvtárból, amelyben a projektfájl létezik:
dotnet user-secrets clear
Az alkalmazás összes felhasználói titkos kódját törölték a secrets.json fájlból:
{}
A futtatás dotnet user-secrets list a következő üzenetet jeleníti meg:
No secrets configured for this application.
Felhasználói titkos kódok kezelése a Visual Studióval
A Visual Studióban a felhasználói titkos kódok kezeléséhez kattintson a jobb gombbal a projektre a megoldáskezelőben, és válassza a Felhasználói titkos kódok kezelése lehetőséget:
Felhasználói titkos kódok migrálása ASP.NET-keretrendszerből ASP.NET Core-ba
Lásd ezt a GitHub-hibajegyet.
Felhasználói titkos kódok nem webes alkalmazásokban
A megcélzott Microsoft.NET.Sdk.Web projektek automatikusan támogatják a felhasználói titkos kulcsokat. Azoknál a projekteknél, amelyek Microsoft.NET.Sdk-et céloznak meg, például konzolalkalmazások esetében, telepítse kifejezetten a konfigurációs bővítményt és a felhasználói titkos NuGet-csomagokat.
A PowerShell használata:
Install-Package Microsoft.Extensions.Configuration
Install-Package Microsoft.Extensions.Configuration.UserSecrets
A .NET parancssori felületének használata:
dotnet add package Microsoft.Extensions.Configuration
dotnet add package Microsoft.Extensions.Configuration.UserSecrets
A csomagok telepítése után inicializálja a projektet , és állítsa be a titkos kulcsokat ugyanúgy, mint egy webalkalmazás esetében. Az alábbi példa egy konzolalkalmazást mutat be, amely lekéri az "AppSecret" kulccsal beállított titkos kód értékét:
using Microsoft.Extensions.Configuration;
namespace ConsoleApp;
class Program
{
static void Main(string[] args)
{
IConfigurationRoot config = new ConfigurationBuilder()
.AddUserSecrets<Program>()
.Build();
Console.WriteLine(config["AppSecret"]);
}
}
További erőforrások
- A felhasználói titkos kódok IIS-ből való elérésére vonatkozó információkért tekintse meg ezt a problémát és ezt a problémát .
- Az ASP.NET Core konfigurációja
- Azure Key Vault-konfigurációszolgáltató a ASP.NET Core-ban