Sitecore Switching Provider

Posted . Visible to the public.

There may be a scenario where the web site is allowing people to register and we want to leverage Sitecore membership system.

In this scenario AND where the CDS server is unable to share the CORE database with the CMS you need to use the switching membership/role/profile provider.

Sitecore editor membership can remain in the CORE database inside the firewall.

  1. Create a new database and script the asp.net membership stuff (aspnet_regsql).
  2. "DELETE FROM aspnet_schemaversions"
  3. Copy over the CORE tables like aspnet_* as well as accesscontrol and rolesinroles
  4. Delete all extranet\ domain users from the core DB
  5. Delete all sitecore\ and default\ users from the new db

Edit the membership provider section in the web.config

<membership defaultProvider="switcher">

<providers>

<clear />

<add name="sitecore" type="Sitecore.Security.SitecoreMembershipProvider, Sitecore.Kernel" realProviderName="sql" providerWildcard="%" raiseEvents="true" />

<add name="sql" type="System.Web.Security.SqlMembershipProvider" connectionStringName="core" applicationName="sitecore" minRequiredPasswordLength="1" minRequiredNonalphanumericCharacters="0" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="256" />

<add name="sitecore_extranet" type="Sitecore.Security.SitecoreMembershipProvider, Sitecore.Kernel" realProviderName="sql_extranet" providerWildcard="%" raiseEvents="true" />

<add name="sql_extranet" type="System.Web.Security.SqlMembershipProvider" connectionStringName="membership" applicationName="sitecore" minRequiredPasswordLength="1" minRequiredNonalphanumericCharacters="0" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="256" />


<add name="switcher" type="Sitecore.Security.SwitchingMembershipProvider, Sitecore.Kernel" applicationName="sitecore" mappings="switchingProviders/membership" />

</providers>

</membership>

<roleManager defaultProvider="switcher" enabled="true">

<providers>

<clear />

<add name="sitecore" type="Sitecore.Security.SitecoreRoleProvider, Sitecore.Kernel" realProviderName="sql" raiseEvents="true" />

<add name="sql" type="System.Web.Security.SqlRoleProvider" connectionStringName="core" applicationName="sitecore" />

<add name="sitecore_extranet" type="Sitecore.Security.SitecoreRoleProvider, Sitecore.Kernel" realProviderName="sql_extranet" raiseEvents="true" />

<add name="sql_extranet" type="System.Web.Security.SqlRoleProvider" connectionStringName="membership" applicationName="sitecore" />


<add name="switcher" type="Sitecore.Security.SwitchingRoleProvider, Sitecore.Kernel" applicationName="sitecore" mappings="switchingProviders/roleManager" /> 

</providers>

</roleManager>

<profile defaultProvider="switcher" enabled="true" inherits="AlphaWire.Website.Users.UserProfile, AlphaWire.Website.Users">

<providers>

<clear />

<add name="sql" type="System.Web.Profile.SqlProfileProvider" connectionStringName="core" applicationName="sitecore" />

<add name="sql_extranet" type="System.Web.Profile.SqlProfileProvider" connectionStringName="membership" applicationName="sitecore" />

<add name="switcher" type="Sitecore.Security.SwitchingProfileProvider, Sitecore.Kernel" applicationName="sitecore" mappings="switchingProviders/profile" />

</providers>

<properties>

<clear />

<add type="System.String" name="SC_UserData" />

</properties>

</profile>

Configure the SwitchingProviders:
<!-- SWITCHING PROVIDERS -->

<switchingProviders>

<membership>

<provider providerName="sitecore_extranet" storeFullNames="true" wildcard="%" domains="extranet" />

<provider providerName="sitecore" storeFullNames="true" wildcard="%" domains="*" />

</membership>

<roleManager>

<provider providerName="sitecore_extranet" storeFullNames="true" wildcard="%" domains="extranet" />

<provider providerName="sitecore" storeFullNames="true" wildcard="%" domains="*" />

</roleManager>

<profile>

<provider providerName="sql_extranet" storeFullNames="true" wildcard="%" domains="extranet" />

<provider providerName="sql" storeFullNames="true" wildcard="%" domains="*" />

</profile>

</switchingProviders>
Posted by skearney to Hedgehog (2015-02-06 23:03)