保存到Active Directory - 域管理员拒绝访问

时间:2013-01-02 09:58:49

标签: c# asp.net active-directory

我正在使用C#Web应用程序来允许对Active Directory用户帐户进行读写访问。

我在我们的主要公司AD上工作得很好 - 我可以读取帐户,获取属性,将详细信息保存回AD,启用/禁用帐户等。我正在使用模拟执行此操作,因此在它保存到之前AD将更改为使用其他帐户(属于Domain Admins),然后在保存后还原为主应用程序池帐户。

我刚刚被要求通过应用程序添加用户帐户,但我不满意在主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();
}

非常感谢任何建议。

1 个答案:

答案 0 :(得分:3)

此问题归结为虚拟机上的用户访问控制设置。

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