代码之家  ›  专栏  ›  技术社区  ›  Nathan Fisher

枚举Active Directory上的用户需要哪些安全权限

  •  3
  • Nathan Fisher  · 技术社区  · 15 年前

    系统规格:

    • 隐藏C代码的InfoPath 2007
    • WebServices
    • Active Directory(Active Directory)

    我需要从Active Directory获取用户名(名字和姓氏),但该用户似乎没有读取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();
     }
    

    我曾经考虑过创建一个获取所需信息的WebService,但这看起来有点过分,但需要确保表单的每个可能用户都必须具有正确的权限。

    编辑:
    我尝试执行的代码是后面的InfoPath代码。表单本身连接到WebServices以检索其部分数据。因此,它在InfoPath的安全模型下。表单完全受信任,因此可以在当前用户上下文下执行。
    我的错误是没有添加额外的细节。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Per Noalt    15 年前

    当你创建一个新的 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时使用该帐户。
        2
  •  1
  •   jellomonkey    15 年前

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

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

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

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

    如果这不能解决问题,可能是应用程序实际上不是作为用户运行的。例如,ASP.NET网站需要使用模拟来查询广告。