保存到活动目录-域管理员的访问被拒绝

本文关键字:管理员 访问 拒绝 活动 保存 | 更新日期: 2023-09-27 17:50:17

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

我已经得到了这个伟大的工作在我们的主要公司AD-我可以读取帐户,获取属性,保存详细信息回AD,启用/禁用帐户等。我使用模拟来做到这一点,所以就在它保存到AD之前,它改变为使用不同的帐户(属于域管理员),然后在保存后恢复到主应用程序池帐户。

我刚刚被要求通过应用程序添加用户帐户,但我不喜欢在主AD上进行测试,因此我设置了一个带有测试AD的VM。我已经在那个VM上安装了应用程序,它从AD读取很好。我已经设置了我在活动AD上模拟的相同用户帐户,并将其添加到域管理员组中。但是,当我试图将详细信息保存给现有用户时,我得到"访问被拒绝"错误。

我知道模拟正在工作,就在保存我输出结果之前,我尝试更改密码,它失败了,出现了不同的错误。

我已经问过我们的网络管理员他是否为实时AD设置了任何特殊的模拟用户,但他说他没有,而且他们看起来是一样的。

除了将模拟用户添加到域管理员组之外,还有谁知道我可能需要做的其他事情吗?我已经尝试以用户身份登录到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。以管理员身份运行浏览器也可能起作用,尽管我没有尝试过。