web-dev-qa-db-ja.com

Entity FrameworkなしでASP.NET Identity 3.0を使用する方法

ASP.NET Identity 3.0で今まで見たすべての例では、Entity Frameworkを使用してユーザー関連データを保存します。

Entity Frameworkを使用せず、ApplicationUserクラスがMicrosoft.AspNet.Identity.EntityFramework.IdentityUserから派生していない例はありますか?

ASP.NET Identity 2.xでは、IUserインターフェイスを実装する必要がありました。現在、そのようなインターフェースはないようです-Userクラスを正しく定義する方法がわかりません。この件に関するドキュメントはほとんどありません。

2番目の問題は、Startup.ConfigureServicesAddIdentity呼び出しにあります。 Microsoft.AspNet.Identity.EntityFramework名前空間の特定のクラスにかなり結びついており、これらのクラスなしでアイデンティティサービスを登録する方法は不明です。

31
Sergiy

プロジェクトに実装しました。実装する必要がある主なものはUserStoreとRoleStoreです

siteUserクラスとSiteRoleクラスは何も継承しません

主なことは、asp.net IDに独自のサービスを追加させる前に、独自のサービスを追加することです

services.TryAdd(ServiceDescriptor.Scoped<IUserStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserPasswordStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserEmailStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserLoginStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserRoleStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserClaimStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserPhoneNumberStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserLockoutStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IUserTwoFactorStore<SiteUser>, UserStore<SiteUser>>());
services.TryAdd(ServiceDescriptor.Scoped<IRoleStore<SiteRole>, RoleStore<SiteRole>>());

同じインターフェースのいくつかがここに登録されますが、最初に登録されている場合はあなたのものを使用します

services.AddIdentity<SiteUser, SiteRole>();
12
Joe Audette

EntityFrameworkを使用せず、ApplicationUserクラスがMicrosoft.AspNet.Identity.EntityFramework.IdentityUserから派生していない例はありますか?

ASP.NET Identity 3はまだリリースされていない.NET Framework 5の一部であるため、例は見当たりません。

ASP.NET Identity 2.xでは、IUserインターフェイスを実装する必要がありました。現在、そのようなインターフェイスはないようです-「ユーザー」クラスを正しく定義する方法がわかりません。このテーマに関するドキュメントはほとんどありません。

繰り返しますが、ドキュメントの欠如は、おそらくソフトウェアの未リリースの性質によるものです。ただし、 ソースコード だけを見ると、ApplicationUserはIUser<TKey>インターフェイスを実装する必要なく、任意のPOCOオブジェクトから派生できるようです。

サービスの設定に関しては、 IdentityServiceCollectionExtensionsIdentityEntityFrameworkBuilderExtensions をご覧ください。最初はアプリケーションアイデンティティのサービスを登録するコンテキストを提供する手段としてアイデンティティコアにあり、2番目はそのコンテキストを使用するエンティティフレームワーク固有の実装のようです。

EFではなくASP.NET Identity 3を使用するものを実装するためのソリューションは、IDサービスインターフェイスの異なる実装を提供し、アプリの構成中にそれらの依存関係を結び付けるだけの問題のようです。 DIYの方法のガイドとして、ベースのEntityFramework実装を使用できます。ただし、注意すべき点として、ID 3は最終リリース前に再び変更される可能性があるため、ID 3に対して作成したものはすべて変更される可能性があります。

2
danludwig