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