2013-07-19 6 views
0

사용자가 로그인을 시도 할 때 다른 LDAP 공급자 (ADService ConnectionString)를 가리켜 야 할 웹 사이트를 개발 중입니다.n 목성 변경 ADService Connectionstring @ runtime

우리의 접근 방식은 로그인 이름 [email protected]을보고 매핑 파일 (아마도 sqlServer 데이터베이스)을 사용하여 로그인 이름을 해당 서비스 공급자에게 매핑하고 연결 문자열을 가져 오는 것입니다. 그런 다음 정상적으로 계속하십시오.

아래의 예제 코드에서 정확한 AdService 연결 문자열에 대해 인증하기 위해 IsAuthenticated가 필요합니다. 연결 문자열을 설정할 때 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"); 
     } 
    } 
} 

답변

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> 
을 몇 가지 의사 코드는