web-dev-qa-db-ja.com

ASP.NET Core 2.0でmachineKeyを実装する方法

ASP.NET(コアではない)では、通常、machineKeyをweb.configに追加して、サーバーではなくローカルマシンでいくつかの機能を実行できるようにして、データベース/コールバック操作で同じキーを使用できるようにします。例えば

<system.web>
  <machineKey validationKey="*********" 
              decryptionKey="*********" 
              validation="HMACSHA256" 
              decryption="AES" />
</system.web>

誰かがこれをASP.NET Core 2.0でどのように行うことができるかアドバイスできますか?

13
pathDongle

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();
    ...
}
13
Set

認証Cookieの生成を担当する従来のASP.NETアプリケーションに基づいてASP.NET Coreアプリケーションを構築するレガシー目的のために、これらのレガシーCookieをASPに取り込むことができるオープンソースライブラリが利用可能です.NET Coreアプリケーション。開発者は、.NET Frameworkリファレンス実装を使用して、独自のMachinekeyベースの暗号化/復号化ロジックを構築しています。 https://github.com/synercoder/FormsAuthentication を参照してください

0
Carl in 't Veld

https://docs.Microsoft.com/en-us/aspnet/core/security/data-protection/implementation/key-storage-providers?view=aspnetcore-2.2&tabs=visualで良い例を見つけることができます-studio

データベースコンテキストを使用して、複数のインスタンス間でキーを永続化しました。

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>();
}
0
Brad