c# - 在 Active Directory 上枚举用户所需的安全权限是什么

标签 c# active-directory infopath

系统规范:

  • 带有 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/

相关文章:

c# - 如何获取 Infopath 表单中的 QueryString 值

c# - 从 VS2008 VSPackage,我如何在插入符号位置发生变化时得到通知?

c# - 获取 PrincipalContext 选择的域

c++ - 带有 NameFullyQualifiedDN 的 GetUserNameEx 在 3-4 秒内没有返回,为什么?

java - 我将如何使用 OAuth 和 Active Directory 通过 Internet 实现单点登录

sharepoint - 从列表框中删除空白项

c# - 在代码隐藏的 WPF 中创建闪烁动画

c# - 试图了解如何创建流畅的界面,以及何时使用它们

c# - 使用泛型和 LINQ 的 MVC3 HtmlHelpers