Using multiple membership providers within ASP.Net MVC 3 application

JBeckton picture JBeckton · Mar 17, 2011 · Viewed 9.4k times · Source

I am adding a new area to an existing mvc 3 razor app as an admin area for managing some settings and content. The rest of the site is currently secured by a custom provider that authenticates our clients. Now I need to authenticate some employees to access the admin area, The client user data is in a totally different database and format than what I need for our employees.

Is this possible without a lot of headaches?

Answer

Mikael Östberg picture Mikael Östberg · Mar 17, 2011

There is actually very little headache involved.

Simply add all the MembershipProviders you want in web.config:

<membership defaultProvider="MembershipProvider1">
  <providers>
    <clear/>
    <add name="MembershipProvider1" type="MvcApplication.MembershipProvider1" />
    <add name="MembershipProvider2" type="MvcApplication.MembershipProvider2" />
    <add name="AspNetSqlMembershipProvider"
      type="System.Web.Security.SqlMembershipProvider"      
      connectionStringName="ApplicationServices" />
  </providers>
</membership>

As you can see I have added two providers. I have also specified a default provider.

I can then switch between the two like this:

var membershipProvider1 = Membership.Providers["MembershipProvider1"];
membershipProvider1.ValidateUser("Mike", "banana");

var membershipProvider2 = Membership.Providers["MembershipProvider2"];
membershipProvider2.ValidateUser("Mike", "orange");

You probably want to wrap that into an application service or something, but you get the idea. Not so much headache, right?