枚举活动目录上的用户所需的安全权限是什么

时间:2009-11-10 01:28:26

标签: c# active-directory infopath

系统规格:

  • Infopath 2007 with c#code-behind
  • WEBSERVICES
  • Active Directory

我需要从活动目录中获取用户名(名字和姓氏),但用户似乎没有权限读取活动目录列表。

我需要哪些权限才能让用户搜索AD

我正在使用这样的代码

 SearchResult result;
 using (DirectoryEntry de = new DirectoryEntry("LDAP://DC=contoso,DC=com,DC=au"))
 {
     DirectorySearcher search = new DirectorySearcher(de, (string.Format("(&(objectClass=user)(mailNickname={0}))",this.Application.User.UserName)));
     result = search.FindOne();
 }

我考虑过创建一个获取所需信息的网络服务,但这看起来有些过分,但必须确保表格中每个可能的用户都需要拥有正确的权限

修改
我试图执行的代码是infopath代码。表单本身连接到webservices以检索其部分数据。因此它属于infopath的安全模型。表单是完全可信的,因此在当前用户上下文中执行应该没问题   我没有添加额外的细节。

2 个答案:

答案 0 :(得分:3)

当您创建新的DirectoryEntry而未指定用户名和密码时,您使用执行用户的凭据连接到Active Directory - 在您的情况下可能是Web服务器上的本地IUSR _...-帐户这是在IIS中设置新网站时使用的默认帐户。因为这是一个本地帐户,您将无法访问Active Directory。

您有两种选择:

  • 在Active Directory中创建服务帐户并明确使用该帐户,即DirectoryEntry de = new DirectoryEntry("LDAP://DC=contoso,DC=com,DC=au", "sa-username", "sa-password", AuthenticationTypes.Secure)。当然,代码中的明文密码不是一个好主意,所以找一种加密密码的方法。

  • 为您的网站(IIS 6+)配置IIS应用程序池,以便在域用户帐户下运行 - 这种方式在连接到Active Directory时使用该帐户。

答案 1 :(得分:1)

默认情况下,AD的任何用户都应具有浏览AD的权限。

您可能只需要更改目录条目以指向用户容器,如下所示:

new DirectoryEntry("LDAP://CN=users,DC=contoso,DC=com,DC=au")

您的用户容器可能是另一个名称。

如果这不能解决问题,则可能是应用程序实际上并未以用户身份运行。例如,ASP.NET网站需要使用模拟才能查询AD。