2009-11-10 51 views
3

系统规格:什么是枚举用户的活动目录所需的安全权限

  • 2007年InfoPath用C#代码隐藏
  • WEBSERVICES
  • 的Active Directory

我需要得到用户名称(名字和姓氏)来自活动目录,但用户似乎没有读取活动目录列表的权限。

什么权限需要给用户,以便他们能够搜索广告

我使用这样的

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(); 
} 

代码,我已经考虑创建一个Web服务是获取所需的信息,但似乎是过度杀伤,但会避免必须确保表格的每个可能的用户都必须拥有正确的权限

编辑:
我试图执行的代码是infopath代码。表单本身连接到Web服务来检索其中的一些数据。因此它属于infopath的安全模型。该表格是完全可信的,因此在当前用户环境下执行应该没问题。
我没有添加额外的细节。

回答

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时使用。
+0

@Per谢谢你。我可能能够在信息结尾使用你的第一个选项。我已经编辑了这个问题,说在这一点上代码在infopath结束时正在执行。将代码调用AD转换为web服务是一个考虑因素,在这种情况下,您的第二个选项可能会发挥作用。 – 2009-11-18 21:46:50

1

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

你可能只需要改变你的目录项指向用户容器,像这样:

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

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

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

+0

问题可能来自信息安全模型。它基本上就像Internet Explorer一样,它可以访问的信息类型非常有限。是沙盒吗? – 2009-11-10 05:58:07