I am developing asp.net mvc web application with Entity Framework 6.1.3. The asp.net identity that comes by default seemed fine to me until my boss said we cannot make any changes to the database tables (users, user roles) to fit with aspnet identity, as it is a legacy db..as is described here: https://www.youtube.com/watch?v=elfqejow5hM
So, what are my options now? can i totally remove aspnet identity? how? can i tell my identitycontext that my table names and columns are different and also change the behaviour in rolemanager?
On top of all this, my database is a mysql db Cheers :)
A default ASP.NET MVC project with Individual User Accounts, comes with a middleware named Owin, which in short allows a lot of authentication configs for your app, like:
Meanwhile, Identity is a library built to mix various old memberships, thus allowing you to work with many ASP.NET frameworks, such as ASP.NET MVC, WebForms, etc. Moreover, it comes with a built-in implementation, which also works as a provider for owin capabilities. Though, Identity is all based on interfaces, so developers can easily customize anything there, like plugging/unplugging features. This is just a short description.
So, what are my options now?
Models
folder, there is an IdentityModels.cs
file, with an ApplicationDbContext
class, inheriting IdentityDbContext
. Bring your existing DbSet
for your models there (including for the existing user and role). You can create a relationship between the ApplicationUser
(which comes by default with a brand new project, representing an IdentityUser
) and your existing User. So you won't affect your existing tables at all.User
and Role
implement respectively IUser
and IRole
to combine with Identity.User
and Role
just inherit IdentityUser
and IdentityRole
. After this, naturally your ApplicationDbContext
would like to insert/update some columns in your tables to fit IdentityUser
and IdentityRole
models (since your classes now inherit from them), then you might want to configure it to avoid changing your existing tables.Can i totally remove aspnet identity?
Sure you can. If you don't need all that Owin's features at all, you might not even use it, for sake of simplicity.
How?
You could just create a new project with Forms Authentication rather than Individual User Accounts, and implement a custom RoleProvider
to interact with your existing Role
. It's kinda easy to implement a custom RoleProvider
for forms authentication. You can make your provider check for roles by querying your tables, or consuming a webservice, it's up to you.
Can i tell my identitycontext that my table names and columns are different and also change the behaviour in rolemanager?
Sure. Override the OnModelCreating
method in your ApplicationDbContext
(the same one which inherits IdentityDbContext
) to change all its default behaviour when generating/updating database. You might not call base.OnModelCreating(modelBuilder);
, because this is what creates a lot of configs for your tables.
I suggest you to start reading about ASP.NET Identity and maybe Using MySQL Storage with an MySQL EF Provider, so you can decide whether you keep Identity, customize it, remove it, etc.