다음을 통해 공유


System.Web 어댑터를 사용하여 ASP.NET machineKey 마이그레이션

비고

이렇게 하면 System.Web 어댑터를 사용하여 마이그레이션을 간소화할 수 있습니다.

ASP.NET Framework 앱에서 <machineKey> 및 System.Web 어댑터 호스트를 구성하여 두 앱이 호환되는 데이터 보호 구성을 공유할 수 있도록 합니다. 교체에 대한 전체 배경은 <machineKey>를 참조하세요.

이 지침은 데이터 보호 서비스가 DI(호스트 종속성 주입) 컨테이너에 System.Web 등록되고 ASP.NET Framework 앱 전체에서 사용할 수 있도록 어댑터 호스팅 모델을 기반으로 합니다. 어댑터에서 제공하는 호스트 DI와 통합하면 기존 ASP.NET Framework 구성 요소가 IDataProtectionProviderIDataProtector와 관련된 형식을 해석할 수 있습니다.

ASP.NET Framework 앱과 ASP.NET Core 앱은 모두 데이터 보호를 위해 공유 애플리케이션 이름 및 키 리포지토리를 사용해야 보호된 페이로드가 앱 간에 왕복할 수 있습니다.

  • 두 앱에서 동일한 논리 애플리케이션 이름을 사용하여 호출 SetApplicationName 합니다(예: "my-app").
  • 두 앱이 읽고 쓸 수 있는 동일한 키 리포지토리 위치를 가리키도록 구성 PersistKeysToFileSystem 합니다.

비고

함께 PersistKeysToFileSystem 사용되는 디렉터리가 공유 데이터 보호 키에 대한 백업 저장소입니다. 프로덕션 환경에서는 지속형 공유 저장소(예: UNC 공유, Redis 또는 Azure Blob Storage)를 사용하고 ASP.NET Core Data Protection 구성 및 핵심 데이터 보호 ASP.NET핵심 데이터 보호 개요의 주요 관리 지침을 따릅니다.

ASP.NET Framework 앱 구성

ASP.NET Framework 앱에서 이 구성을 구현하려면, Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices 패키지가 ASP.NET Framework 앱에 설치되어 있는지 확인합니다.

ASP.NET Framework 앱에서 Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices 패키지를 설치하면, 일반적으로 <machineKey>가 자동으로 구성됩니다. 존재하지 않거나 설정을 확인해야 하는 경우 <machineKey> 다음과 같이 호환성 데이터 보호기를 사용하도록 Web.config ''을 구성합니다.

<configuration>
  <system.web>
    <httpRuntime targetFramework="4.8.1" />
    <machineKey
      compatibilityMode="Framework45"
      dataProtectorType="Microsoft.AspNetCore.DataProtection.SystemWeb.CompatibilityDataProtector,
      Microsoft.AspNetCore.DataProtection.SystemWeb" />
  </system.web>
</configuration>

다음으로, System.Web Global.asax.cs어댑터 호스트를 등록하고 ASP.NET Core 앱에서 사용할 것과 동일한 애플리케이션 이름 및 키 리포지토리를 사용하여 데이터 보호를 구성합니다. 다음 예제는 MachineKey Framework 샘플에서 적용됩니다.

using System.IO;
using System.Web;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.AspNetCore.SystemWebAdapters.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace DataProtectionDemo
{
    public class MvcApplication : HttpApplication
    {
        protected void Application_Start()
        {
            HttpApplicationHost.RegisterHost(builder =>
            {
                builder.AddServiceDefaults();

                builder.AddDataProtection()
                    .SetApplicationName("my-app")
                    .PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\myapp-keys\"));
            });
        }
    }
}

이 구성은 다음과 같습니다.

  • ASP.NET Core 앱에서도 사용해야 하는 공유 애플리케이션 이름(my-app)을 설정합니다.
  • 두 앱이 모두 액세스할 수 있는 공유 키 리포지토리(예: UNC 공유)를 구성합니다.
  • <machineKey> 작업(양식 인증, 뷰 상태 MachineKey.Protect및 관련 API)이 ASP.NET Core 데이터 보호를 통해 라우팅되는지 확인합니다.
  • 기존 <machineKey>기반 기능이 ASP.NET Core와 동일한 데이터 보호 시스템을 사용하도록 ASP.NET Framework 호스트의 일부로 실행됩니다.

ASP.NET Core 앱 구성

ASP.NET Core 앱에서 데이터 보호를 위해 추가 구성이 필요하지 않습니다. ASP.NET Framework 앱에서 사용하는 것과 동일한 애플리케이션 이름 및 키 스토리지 위치를 구성하기만 하면됩니다.

using Microsoft.AspNetCore.DataProtection;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDataProtection()
    .SetApplicationName(MachineKeyExampleHandler.AppName)
    .PersistKeysToFileSystem(
        new DirectoryInfo(Path.Combine(Path.GetTempPath(), "sharedkeys", MachineKeyExampleHandler.AppName)));

var app = builder.Build();

// Configure application

app.Run();