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

标签 c# asp.net active-directory

我正在开发一个 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 中。以管理员身份运行浏览器可能也有效,但我没有尝试过。

关于c# - 保存到 Active Directory - 拒绝域管理员访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14119985/

相关文章:

c# - 可编辑的word文档附件

c# - 具有单引号冲突的DataTable选择方法C#

C# 使用字符串访问结构

azure - 当前端 SPA 应用程序和 API 使用 Azure Easy Auth 时如何对它们进行身份验证

c# - C# 中的互相关代码

javascript - 如何将代码隐藏信息传递到 JavaScript 函数中

c# - 在页面部分或方法内实例化 ASP.NET 中的 C# 类

asp.net - ASP.NET 的 MultiView 控件的适当用途是什么?

asp.net-core - 如何在.NET Core 2.0中使用PrincipalContext

Java-LDAP : Attribute is Read-Only