Simple.Data ASP.NET Identity Provider - CodeProject
ASP.Net Identity is Microsoft's latest implementation of a membership and identity service which will replace ASP.NET Membership, SimpleMembership and Universal Membership.
The out of the box implementation of ASP.NET Identity is, unsurprisingly, coupled to Entity Framework (EF) which means if you do want to use the new identity functionality but your app doesn’t use EF for data access, you either end up having to include it in your project anyway or not use Identity.
On a project I was part of towards the end of last year, we ran into this exact problem, we were using Simple.Data for data access but wanted to use the new features of Identity.
One of the advantages of identity over previous membership implementations is that it is possible to provide a different data access layer allowing you to use the database you want but keep the rest of the functionality provided by identity, e.g., password encryption, OAuth, etc.
The advantage of using
Simple.Data is that you aren’t limited to connecting to any one database as you simply include the relevant provider for the database you want to use (if it is supported).
The result is a
Simple.Data provider for ASP.NET Identity which should be able to be dropped into an existing application using EF with little to no change.
You can install it from Nuget using the package manager console with the following command:
PM> Install-Package Simple.Data.AspNet.Identity
If you prefer to use the “Manage Nuget Packages” GUI, it is easiest to search for
If you want to just look at the code or feel like building it from code yourself, the repo on GitHub can be found here.
There are a few limitations with this implementation that it's worth knowing about:
- Due to ASP.NET Identity being designed around generics, you must use concrete classes with it, you cannot use dynamic. To help the provider comes with 2 classes,
IdentityRoleclasses for you to use.
- Database tables – Currently, you need to use database tables that match the
IdentityRoleclasses although they don’t have to be named the same. The Nuget package includes a script for SQL Server to create these tables.
- Relies on referential integrity – When deleting data, ASP.NET Provider does delete any data that may be effected, instead it relies on db referential integrity to clean up linked records.
- Ids stored as strings – although ids for users, roles, etc. are generated as Guids they are stored as strings, this mimics the standard EF model.
IQueryable- this means that the
RoleStorewill throw not implemented exceptions. If you need to query
Roles, you need to do that yourself.
- Only works with
Simple.Datav1 – a version is coming for
Simple.Datav2 (which supports
async await), but this is still a work in progress.
- Db Connection – the provider supports using
Simple.Datadefault connection or a named connection, it currently doesn’t support taking a connection string directly.
Although you need to use the identity classes in the provider, you can inherit from them just like the EF code.
To try and make it as easy as possible to get started with this provider, I have built 2 sample applications based off of the normal MVC project template:
- MVC 5 Standard Sample – This is the standard MVC project template the only change is that it uses
Simple.Datafor data access.
- MVC 5 Sample – This sample is an extension of the standard sample as it includes using roles with identity to be able to control access to pages of your web application.
The easiest way to work with these samples is:
- Create new ASP.NET Web application
- Select the Empty project template
- Once the project has been created, add the appropriate Nuget package
If you want the standard sample, then at the package manager console, type:
PM > Install-Package Simple.Data.AspNet.Identity.MVC5.Standard.Sample
Or if you want the sample that includes roles:
PM> Install-Package Simple.Data.AspNet.Identity.MVC5.Sample
When you install these packages, you will have all the necessary classes and references added to your project and it will create a database in
localDb so you should be able to build and run the code to start working with it immediately.
Both sample projects are in one repo which you can find here if you wish to play with the code that creates the samples although installing the Nuget package is by far the easiest way to get working with the code.
This version is 1.0.0, it is stable and should work without problems (taking limitations mentioned into account).
Going forward, there are several improvements that I intend to make:
Simple.Datav2 – Complete work on this implementation
- Support connection strings – to match normal
Simple.Dataconnection options, add the ability to be passed a connection string.
- Support different id variable types – normal ASP.NET Identity allows for different variable types for ids via more generics, I’m looking to add this in.
- Automated builds – looking to use AppVeyor to build and test the code
- Automate Nuget publishing – once AppVeyor is building the code, look to automate generation and publishing of the Nuget packages
- More samples – add samples showing use of the provider in different ways, e.g., not tied to Owin context
This provider should make it easy for people that wish to use ASP.NET Identity with
Simple.Data right now.
With the planned future improvements, the additional functionality will bring it up to parity with the full EF model.