ASP.NET Core ASP.NET machineKey değiştirme

<machineKey>ASP.NET öğenin uygulanması değiştirilebilir. bu, şifreleme yordamları ASP.NET, yeni veri koruma sistemi dahil olmak üzere bir değiştirme veri koruma mekanizmasıyla yönlendirilmek için pek çok çağrının yapılmasına izin verir.

Paket yüklemesi

Not

yeni veri koruma sistemi yalnızca .net 4.5.1 veya üstünü hedefleyen mevcut bir ASP.NET uygulamasına yüklenebilir. Uygulama .NET 4,5 veya daha düşük bir düzeye hedefliyorsa yükleme başarısız olur.

yeni veri koruma sistemini var olan bir ASP.NET 4.5.1 + projesine yüklemek için, Microsoft.AspNetCore.DataProtection.Systemweb paketini yüklemelisiniz. Bu, varsayılan yapılandırma ayarları kullanılarak veri koruma sisteminin örneğini oluşturur.

paketi yüklediğinizde, form kimlik doğrulaması, görünüm durumu ve MachineKey. Protect çağrıları gibi birçok şifreleme işlemiiçin ASP.NET bildiren Web.config bir satır ekler. Veri koruma API'sini kullanmaz. Eklenen satır aşağıdaki gibi okur.

<machineKey compatibilityMode="Framework45" dataProtectorType="..." />

İpucu

Yeni veri koruma sisteminin, __VIEWSTATE Aşağıdaki örnekte olduğu gibi "CfDJ8" ile başlaması gereken alanları inceleyerek, etkin olup olmadığını söyleyebilirsiniz. "CfDJ8", veri koruma sistemi tarafından korunan bir yükü tanımlayan Magic "09 F0 C9 F0" üstbilgisinin Base64 gösterimidir.

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="CfDJ8AWPr2EQPTBGs3L2GCZOpk...">

Paket yapılandırması

Veri koruma sistemi, varsayılan sıfır kurulum yapılandırmasıyla birlikte oluşturulur. Ancak, varsayılan anahtarlar yerel dosya sistemine kalıcı olduğundan, bu, bir gruba dağıtılan uygulamalar için çalışmaz. Bu sorunu çözmek için, alt sınıfları DataProtectionStartup ve ConfigureServices metodunu geçersiz kılan bir tür oluşturarak yapılandırmayı sağlayabilirsiniz.

Aşağıda, her ikisi de anahtarların kalıcı olduğu ve REST 'de nasıl şifrelendikleri üzerinde yapılandırılmış bir özel veri koruma başlangıç türü örneği verilmiştir. Ayrıca, kendi uygulama adını sağlayarak varsayılan uygulama yalıtımı ilkesini geçersiz kılar.

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");
        }
    }
}

İpucu

Ayrıca, <machineKey applicationName="my-app" ... /> SetApplicationName 'e açık bir çağrı yerine kullanabilirsiniz. Bu, geliştiricilerin yapılandırmak istiyorlarsa, uygulama adı ayarlarsa, geliştiricinin bir DataProtectionStartup ile türetilmiş tür oluşturmasını zormaktan kaçınmak için kullanışlı bir mekanizmadır.

Bu özel yapılandırmayı etkinleştirmek için, Web.config dönün ve <appSettings> paket yüklemesinin yapılandırma dosyasına eklendiği öğeyi bulun. Aşağıdaki biçimlendirme gibi görünür:

<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>

Yeni oluşturduğunuz DataProtectionStartup türetilmiş türünün derleme nitelikli adı ile boş değeri girin. Uygulamanın adı DataProtectionDemo ise, bu, aşağıdaki gibi görünür.

<add key="aspnet:dataProtectionStartupType"
     value="DataProtectionDemo.MyDataProtectionStartup, DataProtectionDemo" />

Yeni yapılandırılan veri koruma sistemi artık uygulamanın içinde kullanıma hazırdır.