Share via


ASP.NET Core'da ASP.NET machineKey değerini değiştirme

öğesinin <machineKey> ASP.NET uygulaması değiştirilebilir. Bu, ASP.NET şifreleme yordamlarına yapılan çağrıların çoğunun yeni veri koruma sistemi de dahil olmak üzere yeni bir veri koruma mekanizması aracılığıyla yönlendirilmesine olanak tanır.

Paket yükleme

Dekont

Yeni veri koruma sistemi yalnızca .NET 4.5.1 veya üzerini hedefleyen mevcut bir ASP.NET uygulamasına yüklenebilir. Uygulama .NET 4.5 veya üzerini hedeflerse yükleme başarısız olur.

Yeni veri koruma sistemini mevcut bir ASP.NET 4.5.1+ projesine yüklemek için Microsoft.AspNetCore.DataProtection.SystemWeb paketini yükleyin. Bu, varsayılan yapılandırma ayarlarını kullanarak veri koruma sisteminin örneğini oluşturur.

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

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

Bahşiş

Yeni veri koruma sisteminin etkin olup olmadığını, aşağıdaki örnekte olduğu gibi "CfDJ8" ile başlaması gereken gibi __VIEWSTATEalanları inceleyerek anlayabilirsiniz. "CfDJ8", veri koruma sistemi tarafından korunan bir yükü tanımlayan sihirli "09 F0 C9 F0" üst bilgisinin 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 oluşturulur. Ancak, varsayılan olarak anahtarlar yerel dosya sisteminde kalıcı olduğundan, bu işlem bir grup içinde dağıtılan uygulamalar için çalışmaz. Bu sorunu çözmek için DataProtectionStartup alt sınıflarını oluşturan ve ConfigureServices yöntemini geçersiz kılan bir tür oluşturarak yapılandırma sağlayabilirsiniz.

Aşağıda, anahtarların nerede kalıcı olduğunu ve bekleyen anahtarların nasıl şifrelendiğini yapılandıran özel bir 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");
        }
    }
}

Bahşiş

SetApplicationName için açık bir çağrı yerine de kullanabilirsiniz <machineKey applicationName="my-app" ... /> . Yapılandırmak istedikleri tek şey uygulama adını ayarlamaksa, geliştiriciyi DataProtectionStartup türetilmiş bir tür oluşturmaya zorlamamak için kullanışlı bir mekanizmadır.

Bu özel yapılandırmayı etkinleştirmek için Web.config'e geri dönün ve paketin <appSettings> yapılandırma dosyasına eklediği öğeyi arayın. Aşağıdaki işaretlemeye benzer:

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

Boş değeri, az önce oluşturduğunuz DataProtectionStartup türetilmiş türünün derleme nitelikli adıyla doldurun. Uygulamanın adı DataProtectionDemo ise, bu aşağıdakine benzer olacaktı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.