2010-08-22 2 views
2

Mono에서 찾을 수있는 Novell.Directory.Ldap 라이브러리를 사용하여 활성 디렉터리에 사용자를 인증하려고합니다. 나는 아래에있는 것보다 더 좋은 방법이 있다는 것을 알고 있습니다. 그러나 Mono에 국한되어 있기 때문에, 이것들은 제가 볼 수있는 최선의 지원 루틴입니다.활성 디렉터리 및 LDAP 라이브러리

.NET 라이브러리를 사용하여 samAccountName으로 사용자를 인증 할 수 있습니다.

using (DirectoryEntry de = new DirectoryEntry()) 
       { 
        de.Username = username; 
        de.Password = password; 
        de.Path = string.Format("LDAP://{0}/{1}", ADHostname, DefaultNamingContext); 
        de.AuthenticationType = AuthenticationTypes.Secure; 

        using (DirectorySearcher deSearch = new DirectorySearcher()) 
        { 
         deSearch.SearchRoot = de; 
         deSearch.PropertiesToLoad.Add("cn"); 
         deSearch.Filter = "(&(objectCatagory=person))"; 

         deSearch.FindOne(); 
        } 
       } 

하지만 모노 내부에서 실행중인 잘못된 자격 증명으로는 실패합니다. 이 기능을 작동시키는 유일한 방법은 사용자 이름에 대해 UPN을 지정하는 것입니다.

de.Username = "[email protected]";

문제는 UPN이 AD에 필수 속성이 아니기 때문입니다. 그렇다면 사용자 이름만으로 사용자를 인증하려면 어떻게해야합니까? 이 닭과 달걀 문제입니다, Authenticating user using LDAP from PHP

그러나 :

나는 한 가지 방법에 대한 게시물이 그것을 할 참조하십시오. 인증 된 사용자로 바인드 할 수 없으면 바인딩 할 수 있도록 사용자 DN 검색을 어떻게 바인드합니까?

도움을 주셔서 감사합니다.

답변

0

일반적으로 응용 프로그램이 다른 사용자 DN을 검색 할 수있는 계정을 갖습니다. 전통적으로 이것은 익명 바인딩을 사용하여 이루어졌지만 요즘은 보안상의 이유로 보통 차단됩니다.

따라서 알려진 DN 및 암호가있는 서비스 계정을 확보하십시오. 해당 서비스 계정으로 바인딩하고 검색 한 다음 검색을 통해 찾은 사용자 DN으로 바인드합니다.

+0

그건 의미가 있습니다. 가능한 한 최소한의 관리자 참여로이 작업을 수행하려고했지만 서비스 계정에 대한 전체 DN을 크게 요구하지 않는다고 가정합니다. 감사. –