nahraďte ASP.NET machineKey v ASP.NET Core
implementaci <machineKey> elementu v ASP.NET je nahraditelný. to umožňuje, aby se většina volání ASP.NET kryptografické rutiny směrovala prostřednictvím mechanismu ochrany dat s náhradními daty, včetně nového systému ochrany dat.
Instalace balíčku
Poznámka
nový systém ochrany dat lze nainstalovat pouze do existující aplikace ASP.NET cílené na rozhraní .net 4.5.1 nebo novější. Instalace se nezdaří, pokud je aplikace cílena na rozhraní .NET 4,5 nebo nižší.
chcete-li nainstalovat nový systém ochrany dat do existujícího projektu ASP.NET 4.5.1 +, nainstalujte balíček Microsoft.AspNetCore.DataProtection.SystemWeb. Tím se vytvoří instance systému ochrany dat s použitím výchozích nastavení konfigurace .
při instalaci balíčku vloží řádek do Web.config , který dává ASP.NET, aby ho používal pro většinu kryptografických operací, včetně ověřování pomocí formulářů, stavu zobrazení a volání MachineKey. Protect. Rozhraní API pro ochranu datnepoužívá. Vložená čára načte následující text.
<machineKey compatibilityMode="Framework45" dataProtectorType="..." />
Tip
To, jestli je nový systém ochrany dat aktivní, můžete zjistit tak, že zkontrolujete pole jako __VIEWSTATE , který by měl začínat řetězcem "CfDJ8", jak je uvedeno v následujícím příkladu. "CfDJ8" je reprezentace Base64 pro hlavičku Magic "09 F0 C9 F0", která identifikuje datovou část chráněnou systémem ochrany dat.
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="CfDJ8AWPr2EQPTBGs3L2GCZOpk...">
Konfigurace balíčku
Systém ochrany dat je vytvořen s výchozí konfigurací s nulovou instalací. Vzhledem k tomu, že ve výchozím nastavení se klíče ukládají do místního systému souborů, nebude tato funkce fungovat u aplikací, které jsou nasazené ve farmě. Chcete-li tento problém vyřešit, můžete poskytnout konfiguraci vytvořením typu, který podtřídy DataProtectionStartup a přepíše její metodu ConfigureServices.
Níže je uveden příklad vlastního typu spuštění ochrany dat, který konfiguruje, kde jsou klíče uložené a jak jsou zašifrované v klidovém stavu. Přepíše taky výchozí zásadu izolace aplikací tím, že poskytne vlastní název aplikace.
using System;
using System.IO;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.AspNetCore.DataProtection.SystemWeb;
using Microsoft.Extensions.DependencyInjection;
namespace DataProtectionDemo
{
public class MyDataProtectionStartup : DataProtectionStartup
{
public override void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection()
.SetApplicationName("my-app")
.PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\myapp-keys\"))
.ProtectKeysWithCertificate("thumbprint");
}
}
}
Tip
Můžete také použít <machineKey applicationName="my-app" ... /> místo explicitního volání SetApplicationName. Toto je praktický mechanismus, který vám umožní vynutit, aby vývojář vytvořil typ odvozený od DataProtectionStartup, pokud všechny, které chtěli nakonfigurovat, nastavoval název aplikace.
Tuto vlastní konfiguraci povolíte tak, že přejdete zpátky na Web.config a vyhledáte <appSettings> element, který balíček do konfiguračního souboru přidal. Bude vypadat jako v následujícím kódu:
<appSettings>
<!--
If you want to customize the behavior of the ASP.NET Core Data Protection stack, set the
"aspnet:dataProtectionStartupType" switch below to be the fully-qualified name of a
type which subclasses Microsoft.AspNetCore.DataProtection.SystemWeb.DataProtectionStartup.
-->
<add key="aspnet:dataProtectionStartupType" value="" />
</appSettings>
Zadejte prázdnou hodnotu se kvalifikovaným názvem sestavení DataProtectionStartup odvozeného typu, který jste právě vytvořili. Pokud je název aplikace DataProtectionDemo, může to vypadat podobně jako na následujícím obrázku.
<add key="aspnet:dataProtectionStartupType"
value="DataProtectionDemo.MyDataProtectionStartup, DataProtectionDemo" />
Nově konfigurovaný systém ochrany dat je teď připravený k použití v rámci aplikace.