System.DirectoryServices
C#을 사용하여 Active Directory에서 그룹 가져 오기
을 통해 Active Directory에서 그룹을 가져 오는 데 문제가 있습니다. 원래 도메인에 등록 된 컴퓨터에서 응용 프로그램을 시작했지만 라이브 도메인 이었기 때문에 AD에 무엇을 쓰고 싶지 않았습니다. 그래서 저는 Windows XP가 설치된 운영 체제를 호스트 컴퓨터에 설치하고 Windows Server 2003을 VM에 설치했습니다.
시스템에 다른 이더넷 포트를 추가하고 스위치를 설정하면 1 이더넷 포트는 VM 전용이고 다른 포트는 호스트 전용입니다.
통신을 위해 IP 주소를 구성한 후 호스트 컴퓨터에 응용 프로그램을 전송하고 해고했지만 DirectoryServicesCOMException
가 나타납니다.
사용자 이름과 암호가 유효하지 않다는 메시지가 나타납니다. (활성 디렉토리가 아닌지 확인하기 위해 세 번째 가상 컴퓨터를 만들고 Windows XP를 설치했습니다.이 Windows XP는 APP에 테스트 된 자격 증명을 사용하여 도메인에 추가했습니다.
그래서 응용 프로그램이 실행중인 컴퓨터가 도메인에 속해 있지 않아야한다고 생각했습니다.
문제의 원인이 된 코드 블록을 찾아보십시오.
public CredentialValidation(String Domain, String Username, String Password, Boolean Secure)
{
//Validate the Domain!
try
{
PrincipalContext Context = new PrincipalContext(ContextType.Domain, Domain); //Throws Exception
_IsValidDomain = true;
//Test the user login
_IsValidLogin = Context.ValidateCredentials(Username, Password);
//Check the Group Admin is within this user
//******HERE
var Results = UserPrincipal.FindByIdentity(Context, Username).GetGroups(Context);
foreach(Principal Result in Results)
{
if (Result.SamAccountName == "Domain Admins")
{
_IsAdminGroup = true;
break;
}
}
Results.Dispose();
Context.Dispose();
}
catch (PrincipalServerDownException)
{
_IsValidDomain = false;
}
}
로그인 대화 상자의 정보가 다음과 같이 입력되었습니다.
Domain: test.internal
Username: testaccount
Password: Password01
누군가가이 오류에서 약간의 빛을 비출 수 있기를 바랍니다 ..
업데이트 :
보안 로그를 확인한 후 서버에서 내 로그인 시도가 성공했음을 알 수 있지만 다음과 같습니다.
_IsValidLogin = Context.ValidateCredentials(Username, Password);
그룹을 확인하는 메니저가 오류를 일으키는 곳의 줄로 인해 주요 문제는 다음과 같습니다. 아래 코드 줄이 네트워크에 연결되지 않은 컴퓨터에서 제대로 작동하지 않는 것입니다.
var Results = UserPrincipal.FindByIdentity(Context, Username).GetGroups(Context);
주어진 사용자를 인증하려고 시도하는 주어진 도메인에 대해이 방법으로 입력 한 사용자 자격 증명이 올바른지 확인하십시오. 이 사용자는 실제로 존재합니까? 'System.DirectoryServices' 네임 스페이스에서'DirectoryEntry'와'DirectorySearcher' 클래스를 사용하여 구식 접근법을 시도해 보셨습니까? 오직 제안 만, 나는 Principal 객체에 대해서는 정말로 모른다. –
사용자가 동일한 자격 증명으로 네트워크에 다른 VM XP 시스템을 배치 한 상태로 AD에 사용자를 볼 수 있으며 cmd에서 'start \\ server1' 명령을 실행하여 자격 증명 대화 상자를 가져와 인증 할 수 있습니다 그것을 통해, 이것은 네트워크의 일부인 기계에서 100 % 작동합니다. – RobertPitt