2016-10-04 2 views
0

LDAP를 사용하여 사용자를 인증하는 ASP.NET MVC 프로젝트가 있습니다. 개발 서버에서 인증이 작동하지만 프로덕션에서는 작동하지 않습니다.LDAP - 디렉토리에 액세스 할 수 없습니다.

프로덕션 전에 프로젝트를 배포 했으므로 LDAP에는 문제가 없습니다. 그런 다음 다시 배포했지만 배포하기 전에 NuGet 패키지 관리자의 모든 패키지를 업데이트했습니다. 하지만 작동하지 않습니다.

이미 개발 서버에서 테스트 한 업데이트 된 패키지로 새 프로젝트를 배포하기 전에는 아무 것도 잘못되지 않습니다. 문제는 프로덕션 서버에서 LDAP 경로에 액세스 할 수 없다는 것입니다.

여기
<appSettings> 
    <add key="FolderPath" value="Files/" /> 
    <add key="DirectoryPath" value="LDAP://blabla.bla.bla:389/CN=Users,DC=blabla,DC=bla,DC=bla" /> 
    <add key="DirectoryDomain" value="bla" /> 
    <add key="UserPermission" value="blabla" /> 
</appSettings> 

가 인증 코드

public bool AuthenticateUser(string domain, string username, string password, string LdapPath, string userPermission) 
{   
    string domainAndUsername = domain + @"\" + username; 

    DirectoryEntry entry = new DirectoryEntry(LdapPath, domainAndUsername, password); 

    try 
    { 
     Object obj = entry.NativeObject; 

     DirectorySearcher search = new DirectorySearcher(entry); 
     search.Filter = "(SAMAccountName=" + userPermission + ")"; 
     search.PropertiesToLoad.Add("cn"); 

     SearchResult result = search.FindOne(); 

     if (null == result) 
     { 
      return false; 
     } 

     LdapPath = result.Path; 
     string _filterAttribute = (String)result.Properties["cn"][0]; 

     if (_filterAttribute != userPermission) 
      return false; 
    } 
    catch (Exception ex) 
    { 
     return false; 
     throw new Exception("Error authenticating user. " + ex.Message); 
    } 

    return true; 
} 

개발 및 생산의 유일한 차이점 설정을 DirectoryPathUserPermission 값은에게이다 : 여기

<appSettings> 단면도이다.

나쁜 영어로 죄송합니다.

감사합니다.

+0

실행하면 오류가 발생합니까? – A3006

+0

@Anand 죄송합니다. 프로덕션 서버에서 오류를 기록하지 않았습니다. 나는 문제가 DirectoryEntry에 있다고 생각한다. 왜냐하면 새로운 프로젝트에서 3 번 로그인을 시도했기 때문에 프로젝트를 이전 프로젝트로 변경하고 다시 로그인하면 작동한다. LDAP에서 3 번 잘못 입력하면 계정이 잠겨서 새 프로젝트로 변경하더라도 로그인 할 수 없으므로 DirectoryEntry가 새 프로젝트에서 전달되는지 확인하기 위해이 작업을 수행합니다. 난 당신이 이해 바랍니다. 감사. – TeachMe

답변

0

멍청한 질문 첫째, dev 및 생산 서버가 동일한 DNS를 사용하고 있습니까?
"blabla.bla.bla"는 프로덕션 서버에서 사용하는 DNS로 확인할 수 있습니다 ("blabla.bla.bla"로 ping을 시도하십시오)?

DNS가 이름을 확인할 수없는 경우 연결에 실패합니다.

관련 문제