C# 保存到Active Directory-域管理员的访问被拒绝

C# 保存到Active Directory-域管理员的访问被拒绝,c#,asp.net,active-directory,C#,Asp.net,Active Directory,我正在开发一个C#Web应用程序,允许对Active Directory用户帐户进行读写访问 我在我们的主要公司广告上做得很好-我可以读取帐户、获取属性、将详细信息保存回广告、启用/禁用帐户等。我使用模拟来实现这一点,所以在它保存到广告之前,它会更改为使用不同的帐户(属于域管理员),然后在保存后恢复到主应用程序池帐户 我刚刚被要求通过应用程序添加用户帐户,但我不喜欢在主广告上测试这一点,因此我用测试广告设置了一个虚拟机。我在该虚拟机上设置了应用程序,它从广告中读取。我已经设置了在live广告上模

我正在开发一个C#Web应用程序,允许对Active Directory用户帐户进行读写访问

我在我们的主要公司广告上做得很好-我可以读取帐户、获取属性、将详细信息保存回广告、启用/禁用帐户等。我使用模拟来实现这一点,所以在它保存到广告之前,它会更改为使用不同的帐户(属于域管理员),然后在保存后恢复到主应用程序池帐户

我刚刚被要求通过应用程序添加用户帐户,但我不喜欢在主广告上测试这一点,因此我用测试广告设置了一个虚拟机。我在该虚拟机上设置了应用程序,它从广告中读取。我已经设置了在live广告上模拟的同一个用户帐户,并将其添加到域管理员组。但是,当我尝试将详细信息保存到现有用户时,会出现“访问被拒绝”错误

我知道模拟正在工作,就像在保存之前我输出结果一样,我尝试更改密码,但失败了,出现了另一个错误

我问过我们的网络管理员,他是否为这个直播广告的模拟用户设置了什么特别的设置,但他说他没有,而且他们看起来是一样的

除了将模拟用户添加到域管理员组之外,有人知道我还需要做什么吗?我尝试以用户身份登录VM,并通过AD本身对用户帐户进行了更改,因此用户似乎具有所需的访问级别

以下是我用来模拟用户的代码:

Impersonation imp = new Impersonation();
string impResult = "";
imp.ImpersonateDomainUser(out impResult, ConfigurationManager.AppSettings["ADAdminUserLogin"], user.Domain, ConfigurationManager.AppSettings["ADAdminUserPwd"]);
...

imp.Revert();
impResult
返回以下内容:

Before impersonation: NT AUTHORITY\SYSTEM 
After impersonation: TESTDOMAIN\user.manager.service
我用来保存到AD的代码是:

var entry = new DirectoryEntry();
var account = userName.Replace(domain, "");

var search = new DirectorySearcher(entry) { Filter = "(SAMAccountName=" + account + ")" };
search.PropertiesToLoad.Add(propertyName);

var result = search.FindOne();

if (result != null)
{
   DirectoryEntry entryToUpdate = result.GetDirectoryEntry();

   if (propertyValue == null || propertyValue.ToString().Length == 0)
      entryToUpdate.Properties[propertyName].Clear();
   else
      entryToUpdate.Properties[propertyName].Value = propertyValue;

   entryToUpdate.CommitChanges();

   entryToUpdate.Close();
   entryToUpdate.Dispose();
}

任何建议都将不胜感激

此问题取决于虚拟机上的用户访问控制设置


一旦我通过控制面板禁用了用户访问控制,我就可以将用户保存到Active Directory。以管理员身份运行浏览器可能也起到了作用,尽管我没有尝试过

我已经在我的应用程序中添加了一些跟踪功能,以确保在使用模拟用户帐户时,它实际上会将属性保存到广告中,情况就是这样。我现在似乎已经修复了它。如果其他人有这个问题,除非你也在虚拟机上测试,否则这是不可能的,这取决于我的用户访问控制设置。我关闭并重新启动了UAC,它现在正在工作。请将您的评论作为答案,并将其标记为有效答案。