C# 从终结点计算机获取组和OU成员身份信息

C# 从终结点计算机获取组和OU成员身份信息,c#,active-directory,ldap,saas,directoryservices,C#,Active Directory,Ldap,Saas,Directoryservices,介绍(如果太长,请原谅): 我的现有产品在端点计算机上运行。 它是用C#2.0编写的(所以我们说的是Win OS),并以系统凭据作为服务运行。 我还有一个服务器端管理程序,除了其他功能外,它还使用与目录提供程序(Active Directory或Novell)的直接连接来显示组织域树 然而,现在我希望转换为SaaS模型——这意味着服务器将不会驻留在组织内部的主机上——因此不再与目录提供者直接连接 为了仍然能够构建组织域树,我决定通过向客户端发送的日志中添加有关域结构的信息来解决这个问题。 (如果

介绍(如果太长,请原谅): 我的现有产品在端点计算机上运行。 它是用C#2.0编写的(所以我们说的是Win OS),并以系统凭据作为服务运行。 我还有一个服务器端管理程序,除了其他功能外,它还使用与目录提供程序(Active Directory或Novell)的直接连接来显示组织域树

然而,现在我希望转换为SaaS模型——这意味着服务器将不会驻留在组织内部的主机上——因此不再与目录提供者直接连接

为了仍然能够构建组织域树,我决定通过向客户端发送的日志中添加有关域结构的信息来解决这个问题。 (如果你有更好的想法,请让我知道——尽管这还不是问题所在)

我的问题是-如何获取域信息? 我使用LDAP和DirectoryServices库进行了一些尝试,并设法从DC获取了我需要的所有信息-但只有当具有足够凭据的用户登录到计算机时。。。 如何编写作为服务在端点计算机上运行的代码,并(至少)告知计算机的组和OU成员身份,以及登录用户的成员身份

非常感谢


[编辑:]找到了一些东西!在注册表中,在[HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\MACHINE]下,“可分辨名称”保存计算机的完整LDAP路径。但我仍然需要组成员身份。

如果您使用System.DirectoryServices,则可以在DirectoryEntry构造函数中指定用户名和密码:

DirectoryEntry de = new DirectoryEntry("domain ldap path",username, password);
如果使用System.DirectoryServices.AccountManagement,PrincipalContext的构造函数具有域、用户和密码选项。因此,您可以作为请求的一部分进行身份验证

PrincipalContext p = New PrincipalContext(ContextType.Domain, DomainName, Username, Password);

您可以将您的服务设置为作为NetworkService登录吗?然后您至少可以查询目录。

谢谢您的回答。我熟悉此选项,但我试图避免在本地存储域凭据(或在目录提供程序中添加安全异常)。这是万不得已的办法。@BigDZ-在域中设置一个提供用户信息但不需要身份验证的web服务怎么样。那么,您的组织域树生成器是否使用此web服务?当我们有一个需要匿名访问的页面时,我们做了类似的事情。很抱歉延迟(没有收到关于您评论的电子邮件)。这是一个很好的主意,实际上是被提出来的。然而,我们尽量减少我们的需求和占地面积。我想知道在与服务器通信期间是否可以访问本地存储在计算机上的域信息。我的意思是-我们可以在文件夹权限中看到域组等等-因此必须有某种本地缓存-不?我可以-但是我必须在本地存储域用户凭据(对于本地用户登录的情况)。这是最后的手段,我仍然希望得到一个答案,让我避免它。