系统规范:
- 带有 C# 代码隐藏的 Infopath 2007
- 网络服务
- 事件目录
我需要从事件目录中获取用户名(名字和姓氏),但该用户似乎没有读取事件目录列表的权限。
我需要授予用户什么权限才能让他们搜索 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();
}
我考虑过创建一个 web 服务来获取所需的信息,但这似乎有点过分,但可以避免必须确保表单的每个可能用户都需要具有正确的权限
编辑:
我要执行的代码是后面的信息路径代码。表单本身连接到网络服务以检索它的一些数据。因此它在 infopath 的安全模型下。该表单是完全受信任的,因此在当前用户上下文下执行应该没问题。
我没有添加额外的细节是我的错。
最佳答案
当您创建一个新的 DirectoryEntry
而不指定用户名和密码时,您将使用执行用户的凭据连接到 Active Directory - 在您的情况下可能是本地 IUSR_...-account Web 服务器,这是在 IIS 中设置新网站时使用的默认帐户。因为这是一个本地帐户,您将无法访问 Active Directory。
你有两个选择:
- 在 Active Directory 中创建一个服务帐户并明确使用该帐户,即
DirectoryEntry de = new DirectoryEntry("LDAP://DC=contoso,DC=com,DC=au", "sa-username", “sa-密码”,AuthenticationTypes.Secure)
。当然,在代码中使用明文形式的密码并不是一个好主意,所以想办法对密码进行加密。
或
- 为您的网站 (IIS 6+) 配置 IIS 应用程序池以在域用户帐户下运行 - 这样在连接到 Active Directory 时会使用该帐户。
关于c# - 在 Active Directory 上枚举用户所需的安全权限是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1705111/