다른 사용자로 가장하여 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;
}
}
사람이 잘못 가거나 방향으로 날 지점 있는지 말해 줄래?
다른 사용자의 데이터를 업데이트 할 수있는 권한이있는 한 명의 사용자 만 모든 사용자의 자격 증명을 갖고 있습니다. – Deathmic
그게 전부 네가 필요합니다. 'god'계정의 자격증 명을 가지고 있다면 DirectoryEntry의 생성자에 제공하여 개체에 보안 컨텍스트를 설정하십시오. 그런 다음 원하는 모든 변경 작업을 수행 할 수 있습니다. 보조 \ god 계정의 자격 증명을 안전하게 저장하는 좋은 메커니즘이 있기를 바랍니다. – CaptDialup
SearchResult.GetDirectoryEntry()를 통해 검색에서 DirectoryEntry 항목을 가져오고 있으므로이 방법으로 인스턴스화 할 수 있다고는 생각하지 않습니다. – Deathmic