web-dev-qa-db-fra.com

Comment utiliser ASP.net Core 1 "SignInManager" sans EntityFramework

Je cherche à implémenter l'authentification ASP.net via le SignInManager mais sans l'EntityFramework. J'ai créé ma propre couche de base de données à l'aide de SQLClient et je souhaite simplement créer les appels nécessaires pour faire fonctionner l'authentification ASP.net.

Le code que j'ai est le suivant (exécuté à partir de Startup.cs):

// Add EF services to the services container.
services.AddEntityFramework()
    .AddSqlServer()
    .AddDbContext<OAuthAppDbContext>(opt => opt.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));

// Add Identity services to the services container.
services.AddIdentity<ApplicationUser, ApplicationRole>(options =>
{
    options.Cookies.ApplicationCookieAuthenticationScheme = "ApplicationCookie";
    options.Cookies.ApplicationCookie.AuthenticationScheme = "ApplicationCookie";
    options.Cookies.ApplicationCookie.CookieName = "oAuthInterop";
    options.Cookies.ApplicationCookie.AutomaticChallenge = true;
    options.Cookies.ApplicationCookie.AutomaticAuthenticate = true;
    options.Cookies.ApplicationCookie.DataProtectionProvider = new DataProtectionProvider(new DirectoryInfo("d:\\development\\artefacts"),
        configure =>
        {
            configure.SetApplicationName("TestAuthApp");
            //configure.ProtectKeysWithCertificate("thumbprint");
        });
})
    .AddEntityFrameworkStores<OAuthAppDbContext, int>()
    .AddDefaultTokenProviders();

et je dois supprimer la dépendance Entity Framework (et appeler mes propres méthodes db pour collecter les détails de l'utilisateur). Quelqu'un d'autre a-t-il fait quelque chose de similaire dans le noyau ASP.net?

Merci d'avance pour tout pointeur! :-)

23
Rob McCabe

À tout le moins, vous voudrez implémenter IUserStore <ApplicationUser> , IUserPasswordStore <ApplicationUser> , et IRoleStore <ApplicationUser> de quelque manière que ce soit vous le jugez utile et enregistrez-les avec votre IServiceCollection. Il y a quelques autres interfaces que vous voudrez peut-être implémenter pour obtenir la fonctionnalité d'identité complète (IUserClaimsStore, IUserPhoneNumberStore, IUserLockoutStore, etc. - vous pouvez trouver la liste complète sur GitHub ).

Enfin, n'oubliez pas de supprimer vos enregistrements de service EF!

J'ai mis en place un exemple en mémoire vraiment basique ici . C'est vraiment rapide et sale, donc je ne recommanderais pas d'essayer de m'en inspirer trop. Si vous voulez vraiment voir une implémentation correcte, voici comment la version EF réelle est implémentée !

42
Matthew King