如何使用用户名和密码访问Active Directory上的用户文件夹?

时间:2014-06-28 08:37:12

标签: c# active-directory ldap

我的系统中有一些用户注册为Active Directory用户。他们将一些文件夹重定向到我们服务器的目录。

在我的测试环境中,有2个用户User1User2,他们将Documents个文件夹重定向到我的服务器。

  • User1的文件夹位于\\netapp\profiles\User1\Documents

  • User2的文件夹位于\\netapp\profiles\User2\Documents

以下是我的管理员为我提供的服务器结构。

  • dc。 myDomain - > DNS, DHCP, AD

  • 云端硬盘。 myDomain - >我的Web应用程序将在

  • 上运行的服务器
  • W8User1。 myDomain - >用户1

  • W8User2。 myDomain - >用户2

我要做的是让他们能够从我将要开发的Web应用程序中查看他们的文件。我对这个Active Directory的东西很新,甚至不确定它是否可能。这是我到目前为止所拥有的。

using ( var context = new PrincipalContext(ContextType.Domain, "<myDomain>", "DriveAdmin@<myDomain>", "password") ) 
{
    //Username and password for authentication.
    if ( context.ValidateCredentials("User1@<myDomain>", "password") )
    {
        var de = new DirectoryEntry(@"LDAP://<myDomain>", "User1@<myDomain>", "password");

        DirectorySearcher searcher = new DirectorySearcher(de);

        var r1 = "";

        foreach ( SearchResult s in searcher.FindAll() )
            r1 += s.Path + "<br>";

        var r2 = "";

        foreach ( var d in Directory.GetDirectories(@"\\netapp\profiles\User1") )
            r2 += d + "<br>";

    }
    else /// unauthorized;
}

验证工作正常。

r1给了我很多记录,我没有使用和不理解,例如。

  

LDAP://bilgiturk.depo/..blah blah DC .. blah blah OU ..等等

我甚至无法得到r2,因为您认为它会导致Access Denied例外。

可行吗?当我在网上搜索Active Directory C#的东西时,我只遇到了Active Direcrory管理操作,比如添加用户创建组等等。所以我开始觉得它甚至不可能?请指导我。

1 个答案:

答案 0 :(得分:2)

您可以从Active Directory中读出用户的姓名和主目录 - 但是不能读取用户的密码,因此您无法模拟该用户访问其主目录。

但是你有两个选择:

  1. 如果您直接从他那里获得用户的凭据(用户名和密码),您可以模仿该用户,并且在该用户的上下文中,您应该能够获得他自己的主目录中的所有文件和文件夹(请参阅Rick Strahl's blog post了解一种方法)

  2. 如果您可以在具有(只读,读取目录)访问所有用户主文件夹的特定帐户下运行Web应用程序,您甚至可以避免进行模拟(但在这种情况下,您的ASP.NET应用程序的帐户需要扩展访问权限)