注
これにより、 System.Web アダプター を使用して移行が簡略化されます。
ASP.NET Framework アプリで、両方のアプリが互換性のあるデータ保護構成を共有できるように、 <machineKey> と System.Web アダプター ホストを構成します。
<machineKey>の置換に関する完全な背景については、「ASP.NET Core の ASP.NET machineKey を置き換える」を参照してください。
このガイダンスは、データ保護サービスがホスト依存関係挿入 (DI) コンテナーに登録され、ASP.NET Framework アプリ全体で使用できるように、 System.Web アダプター ホスティング モデルに基づいています。 アダプターによって提供されるホスト 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 アプリでこの構成を実装するには、ASP.NET Framework アプリに Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices パッケージがインストールされていることを確認します。
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>
次に、 Global.asax.csで System.Web アダプター ホストを登録し、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