从可信域管理添加成员到AD组为此,我必须模拟两个不同的技术用户,但这很好,所以我不会强调那部分代码。为了构建适当且可管理的文件系统ACL,我必须这样做如果我从同一域添加用户,代码工作正常,所以我相信我只是在这里遗漏了一些小信息。我使用这个文档作为参考,也看到了这个问题(有些人引用了这个错误消息),但没有一个帮助。代码(删掉了try-catch块以使其更简单)//de是AD组的一个DirectoryEntry对象,被该方法接收为参数//第一次模拟在domainB中搜索//工作正常if(impersonator.impersonateUser("techUser1","domainB","pass")){DirectoryEntrydom=newDirectoryEntry("LDAP://domainB.company.com/OU=MyOU,DC=domainB,DC=company,DC=com",“techUser1”,“通过”);de.Invoke("Add",newobject[]{"LDAP://domainB.company.com/CN=theUserIWantToAdd,OU=MyOU,DC=domainB,DC=company,DC=com"});//de.Invoke("Add",newobject[]{"LDAP://domainA.company.com/CN=anotherUserFromDomainA,OU=AnotherOU,DC=domainB,DC=company,DC=com"});impersonator.undoImpersonation();}//第二次模拟,因为组(de)在域A中//并且techUser2在那里拥有帐户操作员权限if(impersonator.impersonateUser("techUser2","domainA","pass")){de.CommitChanges();impersonator.undoImpersonation();返回真;}else{//第二次模拟是un成功,所以返回一个空对象returnfalse;第6行有效,如果我调试它或强制将属性写入HttpResponse,它显然就在那里,因此LDAP查询似乎没问题。此外,如果我注释掉第6行并取消注释第7行,那么基本上我添加了来自同一域的用户,整个过程奇迹般地工作。对于domainB,我被卡住了。有什么好的建议吗?按照您的代码,我看到您在域A中将de作为参数传递。然后您正在创建DirectoryEntry对象dom,它被模拟,但从未使用过。但是,您尝试直接使用LDAP将域B的对象添加到de。这一行:de.Invoke("Add",newobject[{"LDAP://domainB.company.com/CN=theUserIWantToAdd,OU=MyOU,DC=domainB,DC=company,DC=com"});没有被冒充。假设您的模拟工作正常,使用DirectorySearcher模拟的dom对象在域B中查找用户,然后将用户对象从域B发送到de。...使用(DirectoryEntrydom=newDirectoryEntry("LDAP://domainB.company.com/OU=MyOU,DC=domainB,DC=company,DC=com","techUser1","pass")){使用(DirectorySearchersearcher=newDirectorySearcher(dom)){searcher.Filter="(&(objectClass=user)(CN=theUserIWantToAdd))";SearchResult结果=searcher.FindOne();de.Invoke("Add",newobject[]{result.Path});}}...UDPATE此示例将向您展示如何从一个域获取用户SID,从另一个域获取搜索组,以及如何使用SID将用户添加到组中。//使用(UserPrincipaluserPrincipal=UserPrincipal.FindByIdentity(domainContext,UPN)){if(userPrincipal!=null){//使用(GroupPrincipalgroupPrincipal=GroupPrincipal.FindByIdentity,text(groupName)){if(groupPrincipal!=null){//检查以确保用户不在该组中if(!userPrincipal.IsMemberOf(groupPrincipal)){stringuserSid=string.Format("",userPrincipal.SID.ToString());DirectoryEntrygroupDirectoryEntry=(DirectoryEntry)groupPrincipal.GetUnderlyingObject();groupDirectoryEntry.Properties["member"].Add(userSid);groupDirectoryEntry.CommitChanges();}}}}}注意我跳过了上面代码中的所有模拟。正如Burzum所建议的那样,最终起作用的是使用委托人。您可以在问题中链接的MSDN文章中看到的原始代码示例在此处不起作用。所以,Principal-based的方法肯定坚持的不够。在为新组提交更改之前,您还需要一行:group.Properties["groupType"].Value=(-2147483644);默认值为0x8000000,我不得不将其更改为0x80000004以使其接受来自其他域的FSP。所以现在组已经存在,它有成员,并且被添加到文件夹的ACL中。以上就是C#学习教程:从添加信任域成员到共享AD组的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
