Ganti machineKey ASP.NET di ASP.NET Core

Implementasi <machineKey> elemen dalam ASP.NET dapat diganti. Ini memungkinkan sebagian besar panggilan untuk ASP.NET rutinitas kriptografi untuk dirutekan melalui mekanisme perlindungan data pengganti, termasuk sistem perlindungan data baru.

Penginstalan paket

Catatan

Sistem perlindungan data baru hanya dapat diinstal ke dalam aplikasi ASP.NET yang ada yang menargetkan .NET 4.5.1 atau yang lebih baru. Penginstalan akan gagal jika aplikasi menargetkan .NET 4.5 atau yang lebih rendah.

Untuk menginstal sistem perlindungan data baru ke proyek ASP.NET 4.5.1+ yang ada, instal paket Microsoft.AspNetCore.DataProtection.SystemWeb. Ini akan membuat instans sistem perlindungan data menggunakan pengaturan konfigurasi default.

Saat Anda menginstal paket, paket menyisipkan baris ke Web.config yang memberi tahu ASP.NET untuk menggunakannya untuk sebagian besar operasi kriptografi, termasuk autentikasi formulir, status tampilan, dan panggilan ke MachineKey.Protect. Ini tidak menggunakan API perlindungan data. Baris yang disisipkan membaca sebagai berikut.

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

Tip

Anda dapat mengetahui apakah sistem perlindungan data baru aktif dengan memeriksa bidang seperti __VIEWSTATE, yang harus dimulai dengan "CfDJ8" seperti pada contoh di bawah ini. "CfDJ8" adalah representasi base64 dari header "09 F0 C9 F0" ajaib yang mengidentifikasi payload yang dilindungi oleh sistem perlindungan data.

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

Konfigurasi paket

Sistem perlindungan data dibuat dengan konfigurasi penyiapan nol default. Namun, karena secara default kunci dipertahankan ke sistem file lokal, ini tidak akan berfungsi untuk aplikasi yang disebarkan di farm. Untuk mengatasinya, Anda dapat menyediakan konfigurasi dengan membuat jenis subkelas DataProtectionStartup dan mengambil alih metode ConfigureServices-nya.

Di bawah ini adalah contoh jenis startup perlindungan data kustom yang mengonfigurasi tempat kunci dipertahankan dan cara kunci dienkripsi saat tidak aktif. Ini juga mengambil alih kebijakan isolasi aplikasi default dengan memberikan nama aplikasinya sendiri.

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

Anda juga dapat menggunakan <machineKey applicationName="my-app" ... /> sebagai ganti panggilan eksplisit ke SetApplicationName. Ini adalah mekanisme kenyamanan untuk menghindari memaksa pengembang membuat jenis turunan DataProtectionStartup jika semua yang ingin mereka konfigurasi adalah mengatur nama aplikasi.

Untuk mengaktifkan konfigurasi kustom ini, kembali ke Web.config dan cari <appSettings> elemen yang ditambahkan ke file konfigurasi paket. Ini akan terlihat seperti markup berikut:

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

Isi nilai kosong dengan nama yang memenuhi syarat rakitan dari jenis turunan DataProtectionStartup yang baru saja Anda buat. Jika nama aplikasinya adalah DataProtectionDemo, ini akan terlihat seperti di bawah ini.

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

Sistem perlindungan data yang baru dikonfigurasi sekarang siap digunakan di dalam aplikasi.