비고
이렇게 하면 System.Web 어댑터를 사용하여 마이그레이션을 간소화할 수 있습니다.
ASP.NET Framework 앱에서 <machineKey> 및 System.Web 어댑터 호스트를 구성하여 두 앱이 호환되는 데이터 보호 구성을 공유할 수 있도록 합니다. 교체에 대한 전체 배경은 <machineKey>를 참조하세요.
이 지침은 데이터 보호 서비스가 DI(호스트 종속성 주입) 컨테이너에 System.Web 등록되고 ASP.NET Framework 앱 전체에서 사용할 수 있도록 어댑터 호스팅 모델을 기반으로 합니다. 어댑터에서 제공하는 호스트 DI와 통합하면 기존 ASP.NET Framework 구성 요소가 IDataProtectionProvider 및 IDataProtector와 관련된 형식을 해석할 수 있습니다.
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();
ASP.NET Core