C# 如何访问用户';在Active Directory上的文件夹中有他的用户名和密码吗?

C# 如何访问用户';在Active Directory上的文件夹中有他的用户名和密码吗?,c#,active-directory,ldap,C#,Active Directory,Ldap,我有一个系统,其中有一些用户注册为Active Directory用户。他们的一些文件夹被重定向到我们服务器上的一个目录 在我的测试环境中,有两个用户User1和User2,他们的文档文件夹被重定向到我的服务器 User1的文件夹位于\\netapp\profiles\User1\Documents User2的文件夹位于\\netapp\profiles\User2\Documents 下面是我的管理员提供给我的服务器结构 dc.myDomain->DNS、DHCP、AD Drive.m

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

在我的测试环境中,有两个用户
User1
User2
,他们的
文档
文件夹被重定向到我的服务器

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

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

下面是我的管理员提供给我的服务器结构

  • dc.myDomain->
    DNS、DHCP、AD

  • Drive.myDomain->我的web应用程序将在其上运行的服务器

  • W8User1.myDomain->User1

  • W8User2.myDomain->User2

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

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;
}
使用(var context=new PrincipalContext(ContextType.Domain,“,“DriveAdmin@”,“password”))
{
//用于身份验证的用户名和密码。
if(context.ValidateCredentials(“User1@”,“password”))
{
var de=newdirectoryEntry(@“LDAP://”、“User1@”、“password”);
DirectorySearcher search=新的DirectorySearcher(de);
var r1=“”;
foreach(searcher.FindAll()中的搜索结果)
r1+=s.路径+“
”; var r2=“”; foreach(Directory.GetDirectories(@“\\netapp\profiles\User1”)中的变量d) r2+=d+“
”; } else///未经授权; }
验证工作正常

r1
给了我很多我没有用过也不理解的记录,例如

LDAP://bilgiturk.depo/.blah blah DC。。诸如此类。。诸如此类

我甚至无法获得
r2
,因为您可能会猜到它会导致
访问被拒绝
异常


这是可行的吗?当我在网上搜索Active Directory C#内容时,我只会遇到Active Directory管理操作,如添加用户创建组等。所以我开始觉得这是不可能的?请指导我。

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

但是,您有两种选择:

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

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


  • :/这意味着我在这里做梦吗?没有任何解决办法吗?顺便说一句,设计是,用户将在我的web应用程序中键入他的用户名和密码,然后根据这些信息,我将完成这些工作?仍然不可能?好的,如果您从他那里获得了用户名和密码,您应该能够模拟该用户,连接到他或她的主目录,并在他(她)自己的凭据上下文中枚举文件。这应该可以-搜索“asp.net中的模拟”或者非常感谢。我在考虑这两种选择,但不确定它们是否可行。现在至少我知道我该去哪里了;)再次感谢。@marc_是对的。访问active directory只有在确定这些目录的位置时才有意义,如果这些数据存在的话。否则访问文件将需要“进程”以用户的身份运行我更喜欢第一种方法,我将尝试一下,当然可以接受这个答案。在您在
    LogonUser
    方法中建议的链接上,有一个参数
    logonType
    ,将其从
    LOGON32\u LOGON\u NETWORK
    更改为
    LOGON32\u LOGON\u INTERACTIVE
    ,我已经实现了我想要做的事情。再次感谢。