【问题标题】:Getting group and OU membership information from an endpoint machine从端点计算机获取组和 OU 成员资格信息
【发布时间】:2011-07-01 19:55:06
【问题描述】:

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

但是 - 现在我希望转换为 SaaS 模型 - 这意味着服务器不会驻留在组织内的主机上 - 因此不再与目录提供商直接连接。

为了仍然能够构建组织域树,我决定通过将有关域结构的信息添加到我的客户发送的日志中来解决这个问题。 (如果您有更好的想法,请告诉我 - 虽然这还不是问题)。

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

非常感谢!

[编辑:] 发现了一些东西!在注册表中,在 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine] 下 - “Distinguished-Name”包含计算机的完整 LDAP 路径。不过,我仍然需要组成员身份。

【问题讨论】:

    标签: c# active-directory ldap saas directoryservices


    【解决方案1】:

    如果您使用 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);
    

    【讨论】:

    • 感谢您的回答。我熟悉此选项,但我试图避免在本地存储域凭据(或在目录提供程序中添加安全异常)。这是最后的手段。
    • @BigDZ - 在域中设置提供用户信息但不需要身份验证的 Web 服务怎么样。然后让您的组织域树构建器使用此 Web 服务?当我们有一个需要匿名访问的页面时,我们做了类似的事情。
    • 抱歉耽搁了(没有收到关于您的评论的电子邮件)。这是一个很好的想法,实际上是提出来的。但是 - 我们尽量减少我们的要求和足迹。我想知道我是否可以在与服务器通信期间访问本地存储在机器上的域信息。我的意思是 - 我们可以在文件夹权限等中看到域组 - 所以必须有某种本地缓存 - 不是吗?
    【解决方案2】:

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

    【讨论】:

    • 我可以 - 但是我必须在本地存储域用户凭据(对于本地用户登录的情况)。这是最后的手段,我仍然希望得到一个让我避免它的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    相关资源
    最近更新 更多