web-dev-qa-db-fra.com

Comment utiliser ASP.NET Identity 3.0 sans Entity Framework

Tous les exemples que j'ai vus pour ASP.NET Identity 3.0 utilisent Entity Framework pour stocker des données liées à l'utilisateur.

Existe-t-il un exemple qui n'utilise pas Entity Framework et où la classe ApplicationUser n'est pas dérivée de Microsoft.AspNet.Identity.EntityFramework.IdentityUser?

Dans ASP.NET Identity 2.x, il était nécessaire d'implémenter l'interface IUser. Il semble qu'il n'y ait pas une telle interface maintenant - nous ne savons donc pas comment définir correctement la classe User. Il n'y a presque aucune documentation à ce sujet.

Le deuxième problème est avec AddIdentity appel dans Startup.ConfigureServices. C'est assez lié aux classes particulières de Microsoft.AspNet.Identity.EntityFramework namespace et on ne sait pas comment enregistrer les services d'identité sans ces classes.

31
Sergiy

Je l'ai implémenté dans mon projet, les principales choses que vous devez implémenter sont UserStore et RoleStore

mes classes SiteUser et SiteRole n'héritent de rien

l'essentiel est d'ajouter vos propres services avant de laisser l'identité asp.net ajouter ses propres services

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>>());

certaines des mêmes interfaces seront enregistrées ici mais elles utiliseront la vôtre si elles sont enregistrées en premier

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

Existe-t-il un exemple qui n'utilise pas EntityFramework et où la classe ApplicationUser n'est pas dérivée de Microsoft.AspNet.Identity.EntityFramework.IdentityUser?

Étant donné qu'ASP.NET Identity 3 fait partie du .NET Framework 5, qui n'est toujours pas publié, je suppose que vous ne trouverez aucun exemple.

Dans ASP.NET Identity 2.x, il était nécessaire d'implémenter l'interface IUser. Il semble qu'il n'y ait pas une telle interface maintenant - donc nous ne savons pas comment définir correctement la classe "User". Il n'y a presque pas de documentation à ce sujet.

Encore une fois, le manque de documents est probablement dû à la nature inédite du logiciel. Cependant, en regardant simplement le code source , il semble que l'ApplicationUser puisse dériver de n'importe quel objet POCO - sans avoir besoin d'implémenter un IUser<TKey> interface.

En ce qui concerne la configuration des services, jetez un œil à IdentityServiceCollectionExtensions et IdentityEntityFrameworkBuilderExtensions . Il semble que le premier soit dans le noyau d'identité comme moyen de fournir un contexte dans lequel enregistrer les services pour l'identité de l'application, tandis que le second est une implémentation spécifique au cadre d'entité utilisant ce contexte.

La solution pour implémenter quelque chose qui utilise ASP.NET Identity 3 mais pas EF semble être simplement une question de fournir différentes implémentations pour les interfaces de service d'identité, puis de câbler ces dépendances pendant la configuration de l'application. Vous pouvez utiliser l'implémentation de base EntityFramework comme guide pour savoir comment bricoler. Mais caveat emptor, l'identité 3 pourrait changer à nouveau avant la version finale, donc tout ce que vous construisez contre l'identité 3 est susceptible de changer.

2
danludwig