2013-05-06 2 views
0

다른 사용자로 가장하여 AD를 업데이트하려고하는 C#의 응용 프로그램이 있습니다.다른 사용자로 가장하여 Active Directory 업데이트

사용자가 AD 계정의 전화 번호와 같이 중요하지 않은 필드를 업데이트 할 수 있도록하기 위해 AD를 읽습니다. 이를 위해 우리는 AD 항목을 업데이트 할 수있는 권한을 가진 새로운 사용자를 만들었습니다. 내 컴퓨터에 그 사람으로 로그인하고 그 프로그램을 시작하여 사용자의 권한을 확인했으며 사용자의 항목을 업데이트 할 수있었습니다.

나는 Uwe Keim's Impersonator class을 사용 중이며 가장은 예외적으로 발생하는 것으로 보입니다.

그러나 테스트 결과 저는 가장을 사용했지만 실제로 로그인 한 사용자를 사용하여 광고를 업데이트하고 있음을 보여줍니다. 내 자신의 광고 항목을 잘 업데이트 할 수는 있지만, 가장 된 사용자 나 다른 광고 항목을 업데이트 할 수는 없습니다. 그래서 전혀 사칭이 전혀없는 것 같습니다.

잘못된 자격 증명을 사용하여 실제적으로 무엇인가를 시도하는 Impersonator를 확인하고 적절한 오류 메시지를 받았습니다. 따라서 사용자 자격 증명은 정확하고 실제로 AD에 대해 확인됩니다.

여기 내 관련 코드는 nonrelevant,의 민감한 부분에 의해 검게 [...] :

private void SaveToAD() 
{ 
    try 
    { 
     [...] 
     using (new Impersonator(@"<user>", @"<domain>", @"<password>")) 
     { 
      foreach ([...]) 
      { 
       DirectoryEntry entry = [...]; 

       entry.Properties[...].Value = [...]; 
       entry.CommitChanges(); 
      } 
     } 
     [...] 
    } 
    catch (UnauthorizedAccessException ex) 
    { 
     // Handling 
    } 
    catch (Win32Exception ex) 
    { 
     // Handling 
    } 
    finally 
    { 
     Cursor = Cursors.Arrow; 
    } 
} 

사람이 잘못 가거나 방향으로 날 지점 있는지 말해 줄래?

답변

1

DirectoryEntry 생성자를 사용하여 가장 할 사용자로 ADSI 연결을 설정할 필요가 없습니다 (자격 증명이 있다고 가정).

 using (var dirRoot = new DirectoryEntry("LDAP://cn=user object, dc=domain, dc=com", @"<domain>\<user>", "<password>")) 
     { 
      dirRoot.Properties["l"].Value = "yada"; 
      dirRoot.CommitChanges(); 
     } 
+0

다른 사용자의 데이터를 업데이트 할 수있는 권한이있는 한 명의 사용자 만 모든 사용자의 자격 증명을 갖고 있습니다. – Deathmic

+0

그게 전부 네가 필요합니다. 'god'계정의 자격증 명을 가지고 있다면 DirectoryEntry의 생성자에 제공하여 개체에 보안 컨텍스트를 설정하십시오. 그런 다음 원하는 모든 변경 작업을 수행 할 수 있습니다. 보조 \ god 계정의 자격 증명을 안전하게 저장하는 좋은 메커니즘이 있기를 바랍니다. – CaptDialup

+0

SearchResult.GetDirectoryEntry()를 통해 검색에서 DirectoryEntry 항목을 가져오고 있으므로이 방법으로 인스턴스화 할 수 있다고는 생각하지 않습니다. – Deathmic

관련 문제