C# 查找用户';Sharepoint中的组SID
我需要在我的Sharepoint(2007)Web部件中找出当前用户所属的所有广告组SID 我想使用System.DirectoryServices.AccountManagement命名空间:C# 查找用户';Sharepoint中的组SID,c#,sharepoint,active-directory,C#,Sharepoint,Active Directory,我需要在我的Sharepoint(2007)Web部件中找出当前用户所属的所有广告组SID 我想使用System.DirectoryServices.AccountManagement命名空间: using (var context = new PrincipalContext( ContextType.Domain )) { using (var user = UserPrincipal.FindByIdentity( context, accountName )) {
using (var context = new PrincipalContext( ContextType.Domain ))
{
using (var user = UserPrincipal.FindByIdentity( context, accountName ))
{
var groups = user.GetAuthorizationGroups();
...
}
}
,但我得到以下错误:
活动编号:10016
通过权限设置(特定于应用程序),用户NT权限\地址为localhost(使用LRPC)的网络服务的SID(S-1-5-20)无权为具有CLSID的COM服务器应用程序激活(本地)
{61738644-F196-11D0-9953-00C04FD919C1}
这可以用这个来解决
但这种方法需要更改注册表值(应用程序的所有权,这样您就可以在dcomcnfg上更改应用程序的值)以及dcomcnfg的COM security上的用户权限,这对我来说不是一个选项
是否有其他方法可以访问Sharepoint中当前用户的组SID
我真的希望我能在SPContext.Current.Web.CurrentUser.Groups中找到这些值,但显然不是。您需要走SharePoint的路,不要使用
系统
程序集,而是使用SharePoint程序集
属性中包含每个用户的SID。由于您只想查找广告组,因此可以检查SPUser
的.IsDomainGroup
属性
现在,您只需检查当前用户:`SPContext.current.Web.CurrentUser(一个
SPUser`object)
要回答如何获取用户所属的所有组的问题,您实际上需要使用System.DirectoryServices
。以下stackoverflow帖子中显示了您问题的解决方案:
简而言之:
SPUser
对象,以及通过DirectoryServices
查询Active Directory,感谢您的重播。对我来说,这个解决方案有一个问题。在使用System.DirectoryServices时,我需要提供具有AD读取权限的用户的用户名和密码。是否有一种方法可以通过SharePoint通过System.DirectoryServices访问广告,而不提供用户凭据?例如,使用此构造函数,将用户名和密码字段留空,并指定特定的身份验证类型?public DirectoryEntry(字符串路径、字符串用户名、字符串密码、AuthenticationTypes authenticationType);指定具有读取权限的用户有什么问题?例如,您可以允许Sharepoint应用程序池的用户读取active directory或为此创建专用用户。谢谢,除了向DirectoryEntry对象提供凭据之外,我看不到其他选项。