LDAP路径和查询本地用户目录的权限?

时间:2014-05-22 13:34:38

标签: c# asp.net permissions active-directory

我正在开发一个Web应用程序,ASP.NET,C#。用户需要使用帐户本地登录到运行该应用的计算机,我将在此示例中将其称为“独眼巨人”。我希望应用程序能够查询用户和组的本地目录,以确定用户所在的组。代码如下所示:

DirectoryEntry entry = new DirectoryEntry("WinNT://cyclops/Users", "SomeServiceAccount",
    "SvcAcctP@$$word", AuthenticationTypes.Secure);
entry.RefreshCache();
// Etc.

我的两个问题是:

  1. 这显然不是正确的使用途径,而是我的研究 和实验没有找到正确的答案。 This MSDN article talks about local paths,但不填空。 我使用“LDAP:// cyclops / Users”,“WinNT:// localhost / Users”, “WINNT://水蚤/ CN =用户”?
  2. 正如你所看到的,我正在提供 本地服务帐户的凭据。该帐户需要 访问本地目录的权限,但我不知道在哪里 设置这些权限。它是某个特定的文件吗?是否 该帐户是否必须是特定群组的成员?
  3. 我的实验产生了很多错误:“无法找到组名。”,“提供程序不支持搜索...”,“服务器无法运行。”,“未知错误(0x80005004)”,等

    感谢您的时间...... -jw

1 个答案:

答案 0 :(得分:1)

WinNT需要以下格式

WinNT://<domain/server>/<object name>,<object class>

要获取给定用户的群组,请使用

using (DirectoryEntry user = new DirectoryEntry("WinNT://./UserAccount,user"))
{
    foreach(object group in (IEnumerable)user.Invoke("Groups",null)) 
    { 
        using(DirectoryEntry g = new DirectoryEntry(group))
        {
            Response.Write(g.Name);
        }
    } 
}

其中

  • UserAccount是所需用户的名称。
  • dot代表当前机器(您可以用cyclops替换它或使用Environment.MachineName)
  • 可能需要用户凭据(“SomeServiceAccount”,“SvcAcctP @ $$ word”),具体取决于设置

要获取特定群组中的用户,请使用

using (DirectoryEntry entry = new DirectoryEntry("WinNT://./Users,group")) 
{
    foreach (object member in (IEnumerable)entry.Invoke("Members"))
    {
        using(DirectoryEntry m = new DirectoryEntry(member))
        {
            Response.Write(m.Name);
        }
    }
}

其中

  • 用户是群组的名称