我有两个域名:MINE和THEIRS。 MINE是我的本地域名,与THEIRS有单向信任(使用LDAPS端口636),因此MINE信任他们,但他们不信任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时,这一切都很有效。问题在于连接到THEIRS。 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中缺少什么?
答案 0 :(得分:0)
我假设你的ASP.NET机器在MINE中运行。
如果您确保使用来自THEIR域的域用户帐户来运行应用程序,那么您的System.DirectoryServices.AccountManagement方法应该可以正常工作。在正常的单向信任配置中(除非您正在进行选择性身份验证信任),来自THEIR的域用户帐户应具有从MINE和THEIR读取的权限。
要确保您使用THEIR域中的域用户,您只需set the AppPool identity即可。当然,你也可以使用模拟来做到这一点。