ASP.NET(コアではない)では、通常、machineKeyをweb.configに追加して、サーバーではなくローカルマシンでいくつかの機能を実行できるようにして、データベース/コールバック操作で同じキーを使用できるようにします。例えば
<system.web>
<machineKey validationKey="*********"
decryptionKey="*********"
validation="HMACSHA256"
decryption="AES" />
</system.web>
誰かがこれをASP.NET Core 2.0でどのように行うことができるかアドバイスできますか?
DataProtection APis を使用する必要があります:
ASP.NET Coreデータ保護スタックは、開発者がキー管理やローテーションなどのデータを保護するために使用できる、シンプルで使いやすい暗号化APIを提供します。
サンプルは公式の DataProtectionリポジトリ にあります。
ちなみに、同じアプローチはASP.NETでも機能します。 ASP.NETの<machineKey>
の置き換え
データ保護システムは、IDataProtectionProvider
メソッドによってデータプロテクター(IDataProtector
インターフェイスで表される)を作成するために使用されるデータ保護プロバイダー(CreateProtector
インターフェイスで表される)の2つのコア概念に基づいて構築されます。データプロテクターは、データの暗号化と復号化に使用されます。
IDataProtectionProvider
をDIに登録するには、.AddDataProtection
メソッドを使用します。
public void ConfigureServices(IServiceCollection services)
{
// Adds data protection services
services.AddDataProtection();
...
}
認証Cookieの生成を担当する従来のASP.NETアプリケーションに基づいてASP.NET Coreアプリケーションを構築するレガシー目的のために、これらのレガシーCookieをASPに取り込むことができるオープンソースライブラリが利用可能です.NET Coreアプリケーション。開発者は、.NET Frameworkリファレンス実装を使用して、独自のMachinekeyベースの暗号化/復号化ロジックを構築しています。 https://github.com/synercoder/FormsAuthentication を参照してください
データベースコンテキストを使用して、複数のインスタンス間でキーを永続化しました。
DbContext.cs
public class MyContext : IDataProtectionKeyContext
{
...
// This maps to the table that stores keys.
public DbSet<DataProtectionKey> DataProtectionKeys { get; set; }
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
...
services.AddDataProtection().PersistKeysToDbContext<MyContext>();
}