1

我有两个域,我的和他们的。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 等。快速代码片段

    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 中缺少什么?

4

1 回答 1

0

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

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

为了确保您使用来自 THEIR 域的域用户,您可以简单地设置 AppPool 身份。当然,您也可以使用模拟来做到这一点。

于 2012-06-23T20:43:00.930 回答