次の方法で共有


System.Web アダプタを使用して ASP.NET の machineKey を移行する

これにより、 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 コンポーネントは、 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 アプリでこの構成を実装するには、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();