ASP.NET Core ASP.NET machineKey 바꾸기

<machineKey>ASP.NET 요소의 구현은 대체 가능 합니다. 이렇게 하면 ASP.NET 암호화 루틴에 대한 대부분의 호출이 새 데이터 보호 시스템을 비롯한 대체 데이터 보호 메커니즘을 통해 라우팅될 수 있습니다.

패키지 설치

참고

새 데이터 보호 시스템은 .NET 4.5.1을 대상으로 하는 기존 ASP.NET 애플리케이션에만 설치할 수 있습니다. 애플리케이션이 .NET 4.5 이하를 대상으로 하는 경우 설치가 실패합니다.

기존 ASP.NET 4.5.1 이상 프로젝트에 새 데이터 보호 시스템을 설치하려면 패키지 Microsoft.AspNetCore.DataProtection.SystemWeb을 설치합니다. 그러면 기본 구성 설정을 사용하여 데이터 보호 시스템이 인스턴스화됩니다.

패키지를 설치하면 양식 인증, 뷰 상태 및 MachineKey.Protect 호출을 포함하여 대부분의 암호화 작업에사용하도록 ASP.NET 지시하는 줄을Web.config삽입합니다. 데이터 보호 API는사용하지 않습니다. 삽입된 줄은 다음과 같이 읽습니다.

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

__VIEWSTATE아래 예제와 같이 "CfDJ8"로 시작해야 하는 와 같은 필드를 검사하여 새 데이터 보호 시스템이 활성 상태인지 확인할 수 있습니다. "CfDJ8"은 데이터 보호 시스템으로 보호되는 페이로드를 식별하는 매직 "09 F0 C9 F0" 헤더의 base64 표현입니다.

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

패키지 구성

데이터 보호 시스템은 기본 설정이 없는 구성으로 인스턴스화됩니다. 그러나 기본적으로 키는 로컬 파일 시스템에 유지되므로 팜에 배포된 애플리케이션에서는 작동하지 않습니다. 이 문제를 해결하려면 DataProtectionStartup을 서브클래스하고 ConfigureServices 메서드를 재정의하는 형식을 만들어 구성을 제공할 수 있습니다.

다음은 키가 유지되는 위치와 암호화된 휴지 모드를 모두 구성한 사용자 지정 데이터 보호 시작 유형의 예입니다. 또한 자체 애플리케이션 이름을 제공하여 기본 앱 격리 정책을 재정의합니다.

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

<machineKey applicationName="my-app" ... />SetApplicationName에 대한 명시적 호출 대신 를 사용할 수도 있습니다. 구성하려는 애플리케이션 이름만 설정하면 개발자가 DataProtectionStartup 파생 형식을 강제로 만들지 않도록 하는 편리한 메커니즘입니다.

이 사용자 지정 구성을 사용하도록 설정하려면 Web.config 돌아가서 <appSettings> 패키지 설치가 구성 파일에 추가한 요소를 찾습니다. 다음 태그와 같습니다.

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

빈 값을 방금 만든 DataProtectionStartup 파생 형식의 정규화된 어셈블리 이름으로 채웁니다. 애플리케이션의 이름이 DataProtectionDemo인 경우 아래와 같습니다.

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

이제 애플리케이션 내에서 새로 구성된 데이터 보호 시스템을 사용할 준비가 되었습니다.