0

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

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

在下面的示例代码中,我需要 IsAuthenticated 对正确的 AdService 连接字符串进行身份验证,我只是不确定何时何地告诉 nJupiter DataAccess Ldap 提供程序何时设置连接字符串。(通常使用 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");
        }
    }
}
4

1 回答 1

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>
于 2013-08-12T13:59:56.543 回答