n Jupiter更改AD服务连接字符串@运行时

时间:2013-07-19 18:07:44

标签: ldap ldapconnection

我们正在开发一个网站,当用户尝试登录时,需要指向不同的LDAP提供程序(ADService ConnectionString)。

我们的方法是查看他们的登录名example@domain.com并使用映射文件(可能是sqlServer数据库)将他们的登录名映射到他们的adservice提供者,然后获取连接字符串。然后继续正常。

在下面的示例代码中,我需要IsAuthenticated对正确的AdService连接字符串进行身份验证我不知道何时何时告诉nJupiter DataAccess Ldap提供程序何时设置connectionstring。 (通常使用nJupiter,它在Web.Config文件中完成 - 但我需要动态更改连接字符串)

所以我们的login.aspx.cs页面包含以下代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (User.Identity.IsAuthenticated)
    {
        if (!string.IsNullOrEmpty(Request.QueryString["ReturnUrl"]))
        {
            Response.Redirect("~/AccessDenied.aspx");
        }
    }
}

1 个答案:

答案 0 :(得分:1)

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>

然后,您可以为Web.Config中的每个服务器配置一个MembershipProvider / RoleProvider;像这样:

<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体系结构,我建议您执行一个包装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>