【问题标题】:Accessing user info from a one way trust从单向信任访问用户信息
【发布时间】:2012-06-15 19:15:35
【问题描述】:

我有两个域,MINE 和 THEIRS。 MINE 是我的本地域,并且与 THEIRS 具有单向信任(使用 LDAPS 端口 636),因此 MINE 信任 THEIRS 但 THEIRS 不信任 MINE。我可以将 THEIRS 中的用户添加到 MINE 中的组,并让 THEIR 中的用户登录到 MINE 网络上的机器和应用程序。信任似乎运作正常。

我正在编写一个小的 .Net 应用程序(不是 ASP.Net)来测试 WAN 上的连接性。我们有一个应用程序在 MINE 中没有看到来自 THEIRS 的用户。其他应用程序(例如 SharePoint)运行良好。

我尝试使用带有 System.DirectoryServices.AccountManagement 对象的 ASP.Net 4 选项,如 PrincipalContext、UserPrincipal、GroupPrincipal 等。快速代码 sn-p

    PrincipalContext domainContext = GetDomainContext(DomainName, ConnectionPort,
        UseSpecifiedCredentials, Credentials);

    GroupPrincipal theGroup = GroupPrincipal.FindByIdentity(domainContext,
        IdentityType.SamAccountName, GroupName);

    PrincipalCollection theUsers = theGroup.Members;

    var users = from u in theUsers
                select u.Name;

    return users.ToArray();

当我直接连接到 MINE 时,一切都很好。问题在于连接到他们的。 LDAPS 流量的单向信任返回错误:

System.DirectoryServices.Protocols.LdapException: The LDAP server is unavailable.

所以我使用 DirectoryEntry、DirectorySearcher 等切换到 .Net 2 变体。这实际上适用于 THEIRS 域。

    List<string> userNames = new List<string>();
    string searchString = string.Format("(sAMAccountName={0})", GroupName);
    SearchResult result = SearchAD(DomainName, ConnectionPort, searchString);

我可以直接连接到 THEIRS 域,在代码中使用一些模拟。

当我在 MINE 中查询组时,我从 THEIRS 获取用户的 SID,而不是用户帐户。

The following users are a member of testGroup:
CN=S-1-5-21-....,CN=ForeignSecurityPrincipals,DC=MINE,DC=local
CN=S-1-5-21-....,CN=ForeignSecurityPrincipals,DC=MINE,DC=local

我也尝试过模拟,以 THEIRS 的用户身份运行它,但没有运气。

当用户在 MINE 中时,我如何从 THEIRS 获取用户信息?我是否必须使用上述 CN/SID 并查询 THEIRS 域?我在 .Net 4 中缺少什么?

【问题讨论】:

    标签: c# c#-4.0 active-directory


    【解决方案1】:

    我假设你的 ASP.NET 机器在 MINE 中运行。

    如果您确保使用他们域中的域用户帐户来运行应用程序,您的 System.DirectoryServices.AccountManagement 方法应该可以正常工作。在正常的单向信任配置中(除非您正在执行选择性身份验证信任),来自 THEIR 的域用户帐户应该具有从 MINE 和 THEIR 读取的权限。

    为确保您使用的是他们域中的域用户,您只需 set the AppPool identity。当然,你也可以使用模仿来做到这一点。

    【讨论】:

    • 我正在使用 .net 客户端应用程序,并且我在代码中运行模拟,但是我尝试了作为选项运行并选择他们的用户。我会尝试一下。
    • 看来我的模拟实际上并不是在模拟我需要的 THEIRS 用户帐户。先解决这个问题。
    • @DavidLozzi 确保您拨打LogonUserEx,然后拨打ImpersonateLoggedOnUser 进行模拟。如果您在不提供密码的情况下模拟登录用户,则需要将您的 IIS 计算机设置为受信任的委派。
    • 请参阅stackoverflow.com/questions/11314172/…,了解我在模拟方面所做的事情。我会检查 LogonUserEx
    • 如果我正确理解您的配置,您正在尝试模拟登录帐户并使用该登录帐户进行组枚举。我建议你最好在 AppPool 中设置一个永久服务帐户来进行组枚举。这可以消除很多权限问题。使用冒充方式的问题是不能保证刚登录的人有足够的权限。
    猜你喜欢
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多