nJupiter .DataAccess.Ldap поддерживает одновременную настройку нескольких серверов в файле конфигурации. Я предлагаю вам настроить все серверы, которые вы собираетесь использовать в nJupiter.DataAccess.Ldap.config так:
<configuration>
<ldapServers>
<ldapServer value="MyServer1"><!-- config goes here --></ldapServer>
<ldapServer value="MyServer2"><!-- config goes here --></ldapServer>
</ldapServers>
</configuration>
И тогда вы можете настроить один MembershipProvider/RoleProvider для каждого сервера в Web.Config; как это:
<system.web>
<membership defaultProvider="MyProvider1">
<providers>
<clear/>
<add name="MyProvider1" ldapServer="MyServer1" type="nJupiter.DataAccess.Ldap.LdapMembershipProvider,nJupiter.DataAccess.Ldap" />
<add name="MyProvider2" ldapServer="MyServer2" type="nJupiter.DataAccess.Ldap.LdapMembershipProvider,nJupiter.DataAccess.Ldap" />
</providers>
</membership>
</system.web>
Вы можете переключаться между провайдерами в режиме исполнения с помощью System.Web.Security.Membership.Providers["MyProvider1"]
и System.Web.Security.Membership.Providers["MyProvider2"]
.
ASP.NET поддерживает только один поставщик по умолчанию, поэтому, если вы хотите перенаправить разных пользователей на разных поставщиков, но все же хотите использовать обычную архитектуру ASP.NET, я предлагаю вам сделать wrapper MembershipProvider/RoleProvider, которые динамически перенаправляют правильные поставщик. Вот некоторые псевдо-код:
public class RedirctingMembershipProvider : System.Web.Security.MembershipProvider {
public override MembershipUser GetUser(string username, bool userIsOnline) {
if(username.Contains("@MyDomain1"){
return Membership.Providers["MyProvider1"].GetUser(username, userIsOnline);
}
if(username.Contains("@MyDomain2"){
return Membership.Providers["MyProvider2"].GetUser(username, userIsOnline);
...
, а затем зарегистрировать поставщика в качестве поставщика по умолчанию в файле web.config, как это:
<system.web>
<membership defaultProvider="RedirctingMembershipProvider">
<providers>
<clear/>
<add name="RedirctingMembershipProvider" type="MyNameSpace.RedirctingMembershipProvider,MyAssembly" />
<add name="MyProvider1" ldapServer="MyServer1" type="nJupiter.DataAccess.Ldap.LdapMembershipProvider,nJupiter.DataAccess.Ldap" />
<add name="MyProvider2" ldapServer="MyServer2" type="nJupiter.DataAccess.Ldap.LdapMembershipProvider,nJupiter.DataAccess.Ldap" />
</providers>
</membership>
</system.web>