Substitua o "machineKey" do ASP.NET no ASP.NET Core
A implementação do elemento <machineKey>
na ASP.NET é substituível. Isto permite que a maioria das chamadas para ASP.NET rotinas criptográficas sejam encaminhadas através de um mecanismo de proteção de dados de substituição, incluindo o novo sistema de proteção de dados.
Instalação do pacote
Observação
O novo sistema de proteção de dados só pode ser instalado em um aplicativo ASP.NET existente destinado ao .NET 4.5.1 ou posterior. A instalação falhará se o aplicativo tiver como destino o .NET 4.5 ou inferior.
Para instalar o novo sistema de proteção de dados em um projeto existente do ASP.NET 4.5.1+, instale o pacote Microsoft.AspNetCore.DataProtection.SystemWeb. Isso irá instanciar o sistema de proteção de dados usando as configurações padrão de .
Quando você instala o pacote, ele insere uma linha no Web.config que informa ao ASP.NET para usá-lo para maioria das operações criptográficas, incluindo autenticação de formulários, estado de exibição e chamadas para MachineKey.Protect. Ele não usa a API de proteção de dados . A linha inserida tem a seguinte redação.
<machineKey compatibilityMode="Framework45" dataProtectorType="..." />
Dica
Você pode saber se o novo sistema de proteção de dados está ativo inspecionando campos como __VIEWSTATE
, que deve começar com "CfDJ8", como no exemplo abaixo. "CfDJ8" é a representação base64 do cabeçalho mágico "09 F0 C9 F0" que identifica uma carga útil protegida pelo sistema de proteção de dados.
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="CfDJ8AWPr2EQPTBGs3L2GCZOpk...">
Configuração do pacote
O sistema de proteção de dados é instanciado com uma configuração padrão sem necessidade de configuração. No entanto, como por padrão as chaves são persistidas no sistema de arquivos local, isso não funcionará para aplicativos implantados em um farm. Para resolver isso, você pode fornecer configuração criando um tipo que subclasses DataProtectionStartup e substitui seu método ConfigureServices.
Abaixo está um exemplo de um tipo de inicialização de proteção de dados personalizado que configurou onde as chaves são persistentes e como elas são criptografadas em repouso. Ele também substitui a política de isolamento de aplicativo padrão fornecendo seu próprio nome de aplicativo.
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");
}
}
}
Dica
Você também pode usar <machineKey applicationName="my-app" ... />
no lugar de uma chamada explícita para SetApplicationName. Este é um mecanismo de conveniência para evitar forçar o desenvolvedor a criar um tipo derivado de DataProtectionStartup se tudo o que eles queriam configurar era definir o nome do aplicativo.
Para habilitar essa configuração personalizada, volte para Web.config e procure o elemento <appSettings>
que a instalação do pacote adicionou ao arquivo de configuração. Ele se parecerá com a seguinte marcação:
<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>
Preencha o valor em branco com o nome qualificado para assembly do tipo derivado de DataProtectionStartup que você acabou de criar. Se o nome da aplicação for DataProtectionDemo, isto ficará assim.
<add key="aspnet:dataProtectionStartupType"
value="DataProtectionDemo.MyDataProtectionStartup, DataProtectionDemo" />
O sistema de proteção de dados recém-configurado está agora pronto para uso dentro do aplicativo.