2008-11-17 79 views
2

我有一个通过ClickOnce分发的.NET应用程序。应用程序内的安全性通过使用一组组作为资源的WindowsPrincipal.IsInRole(GroupName)方法实现。这种结构对于我们对于与组相同的域内的用户来说效果很好。不幸的是,我们现在有用户需要使用在机器上工作的应用程序,并在我们的域所信任的不同域中使用用户帐户,但不在同一个林中。无法让.NET应用程序访问跨域的AD组

看来IsInRole()查询本地计算机上的AD票证以获取组成员资格。不幸的是,此票证仅包含机器域的域本地组和其他受信任域的全局和通用组,我们的组是第一个域中的域本地组。捕捉22的情况来自于这样一个事实,即AD不允许外部安全委托人在全球或全球团体中,因此虽然第二个领域的用户可以查询他们,但他们不能成为它的成员(使其毫无意义! )

解释: 有两个域:DOM1和DOM2,它们之间有信任设置,但它们不在同一个林中。

DOM1\User1 
DOM2\User2 

是两个用户。

我想把User1User2放在一个对两个用户都可见的组中,并且可以同时包含它们。

我可以围绕它目前看到的唯一方法是以下(其中{}表示组,DL =域本地和GLO = GlobalGroup的成员。)

让两个全局组一个在各个领域:

DOM1\GLOGroup1 : {DOM1\User1} 
DOM2\GLOGroup1 : {DOM2\User2} 

,并包含两个全局组的两个域本地组:

DOM1\DLGroup1 : {DOM1\GLOGroup1, DOM2\GLOGroup1} 
DOM2\DLGroup1 : {DOM1\GLOGroup1, DOM2\GLOGroup1} 

但是,这是不是真的可以接受的,我们实际上有两个以上的域的d大约70个小组需要管理,包括小组的等级,我们对其他领域的小组管理没有太多直接的控制。

我们还没有完成任何关于使用LDAP的方法的思考,但是从我读过的那一点我相信它通常不被推荐用于此目的?

回答

0

不应该它是一个通用组,允许来自多个受信任域的用户?

您正在检查AD的用户帐户还需要能够读取每个广告组的ou's。

莫罗

+0

感谢毛罗, 是的,我们试图通用组太多,但它们不能包含外部安全主体要么这意味着用户是DOM2不能在一组。 – user38292 2008-11-17 17:28:38

0

的文档状态(字符串过载):

作用只能为 当前主体的域来确定。

但它没有声明对于SecurityIdentifier重载。所以可能它会工作(没有测试过)。你可以用wmi得到sid。例子不被发现。

+0

干杯。 SecurityIdentifier重载似乎也遭受同样的问题。 – user38292 2008-11-19 16:21:51

+0

很抱歉听到这个消息。 – 2008-11-19 22:05:02

1

您可以尝试使用LDAP来代替,但您必须知道要查询哪个LDAP服务器;看到this answer示例代码