手動で作成しようとするとDataProtectionProvider、マイクロソフトのドキュメントに出くわしましDpapiDataProtectionProviderた。
Data Protection API から派生したデータ保護サービスを提供するために使用されます。アプリケーションが ASP.NET によってホストされておらず、すべてのプロセスが同じドメイン ID として実行されている場合、これはデータ保護の最良の選択です。
突然疑問が生じます。アプリケーションが ASP.NET によってホストされている場合、どの選択肢が最適でしょうか?
DataProtectionProviderさらに検索すると、OWIN からを取得するのが最善の選択のようです。これは、呼び出し可能な名前空間IAppBuilderにAppBuilderExtensionsあるスタートアップ構成で行うことができます。Microsoft.Owin.Security.DataProtectionapp.GetDataProtectionProvider()
これまでのところ、私はかなり満足しています。DataProtectionProviderただし、クラスのコンストラクター (たとえば a )に を注入する必要がありますUserManager。を静的プロパティに格納し、必要な場所で使用するという提案を見DataProtectionProviderたことがありますが、それはかなり間違った解決策のようです。
次のコードのようなソリューションが適切だと思います (ninject コンテナーを使用):
kernel.Bind<IDataProtectionProvider>()
// beware, method .GetDataProtectionProvider() is fictional
.ToMethod(c => HttpContext.Current.GetOwinContext().GetDataProtectionProvider())
.InRequestScope();