2010-11-26 1 views
8

오늘 아침 나는 Active Directory 개체가 서버에 있는지 여부를 확인할 수있는 좋은 방법 (DirectoryEntry.Exists)을 발견했습니다. 그래서 간단하게 시도해 보았습니다.DirectoryEntry.Exists에 자격 증명을 제공하는 방법은 무엇입니까?

if (DirectoryEntry.Exists(path)) {} 

물론 자격 증명을 제공하는 오버로드가 없습니다. 자격 증명을 제공하지 않으면 예외가 발생합니다.

로그온 실패 : 알 수없는 사용자 이름 또는 암호가 잘못되었습니다. (System.DirectoryServices.DirectoryServicesCOMException)

나에게 AD 서버에 내 코드를 인증 할 수있는 가능성을 제공합니다 다른 옵션이 있습니까? 또는 객체의 존재를 확인 하시겠습니까?

답변

13

를 제공하지 않습니다

DirectoryEntry directoryEntry = new DirectoryEntry(path); 
directoryEntry.Username = "username"; 
directoryEntry.Password = "password"; 

bool exists = false; 
// Validate with Guid 
try 
{ 
    var tmp = directoryEntry.Guid; 
    exists = true; 
} 
catch (COMException) 
{ 
    exists = false; 
} 
+0

그게 내 선호하는 솔루션이 될 것이지만,이 속성은 내게 정적 보이지 않는 모양 : http://msdn.microsoft.com/en-us/library/system.directoryservices.directoryentry.username.aspx –

+0

오 나는 결코 신경 쓰지 않는다. 네, 새로운 DirectoryEntry를 설치해야 할 것입니다. 편집 됨. – JoeBilly

+0

좋은 코드 샘플을 보내 주셔서 감사합니다. 분명히 이것이 유일한 방법입니다. 그것은 기본적으로 가능하지 않은 끔찍한 일입니다.그물 방법,하지만 적어도 좋은 해결 방법은 일을 않습니다! –

0

프로세스를 실행 한 사용자에게 DirectoryEntry.Exists를 호출 할 권한이없는 경우 가장을 사용할 수 있습니다.

이 도움이 될 수는 (광고 맥락에서 가장을 설명) : http://www.codeproject.com/KB/system/everythingInAD.aspx

을, BTW 이미 해당 사용자와 당신이 필요로하는 모든 것을, 왜 그냥 프로세스에 대한 액세스 권한이있는 사용자의 자격 증명이있는 경우 (예를 들어,/runas)? 여기

+0

감사합니다. 그 같은 발견,하지만 내 문제에 대한 강하 해결책을 제공하지 않습니다. Runas는 현재 내 프로젝트의 옵션이 아닙니다. 가장은 아니지만 지금까지는 최고로 보입니다. –

1

그래서 질문에 답 : 불가능합니다.

마지막으로 고유 한 메서드를 작성하여 고유 한 자격 증명으로 구분 된 이름으로 DirectoryEntry를 가져옵니다. 존재/존재하지 않는 두 경우 모두 DirectoryEntry의 인스턴스가 있습니다. 유효한 객체인지 여부를 확인하기 위해 간단한 try ... catch를 수행하여 예외가 발생하는지 확인합니다. 그렇다면 무효입니다.

불쾌한 검사이지만 작동합니다. 너무 나쁜 기본 .NET 방법 DirectoryEntry.Exists 당신이 말한대로 정적 메소드가 존재 당신은 사용할 수 없습니다이 경우 바로하여 DirectoryEntry 생성자와 같은 자격 증명을 제공 할 수있는 과부하 ...