系统规格:
我需要从活动目录中获取用户名(名字和姓氏),但用户似乎没有权限读取活动目录列表。
我需要哪些权限才能让用户搜索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的安全模型。表单是完全可信的,因此在当前用户上下文中执行应该没问题
我没有添加额外的细节。
答案 0 :(得分:3)
当您创建新的DirectoryEntry
而未指定用户名和密码时,您使用执行用户的凭据连接到Active Directory - 在您的情况下可能是Web服务器上的本地IUSR _...-帐户这是在IIS中设置新网站时使用的默认帐户。因为这是一个本地帐户,您将无法访问Active Directory。
您有两种选择:
DirectoryEntry de = new DirectoryEntry("LDAP://DC=contoso,DC=com,DC=au", "sa-username", "sa-password", AuthenticationTypes.Secure)
。当然,代码中的明文密码不是一个好主意,所以找一种加密密码的方法。或
答案 1 :(得分:1)
默认情况下,AD的任何用户都应具有浏览AD的权限。
您可能只需要更改目录条目以指向用户容器,如下所示:
new DirectoryEntry("LDAP://CN=users,DC=contoso,DC=com,DC=au")
您的用户容器可能是另一个名称。
如果这不能解决问题,则可能是应用程序实际上并未以用户身份运行。例如,ASP.NET网站需要使用模拟才能查询AD。