C# GetAuthorizationGroups仅适用于管理员用户

C# GetAuthorizationGroups仅适用于管理员用户,c#,web,permissions,active-directory,C#,Web,Permissions,Active Directory,Intranet中的我的网站(具有Windows身份验证)使用某些DLL检查Active Directory中的当前用户权限。它使用GetAuthorizationGroups方法,工作得很好。DLL大约在10年前的VS 2005中编译。现在我需要对其代码做一些更改(未连接到Active Directory)。我在VS2012框架3.5中打开了源代码,编译并复制到网站的服务器上。现在,不属于此服务器的Administrators组的用户出现错误: 尝试检索授权组时,出现错误(5) 旧版本的DLL

Intranet中的我的网站(具有Windows身份验证)使用某些DLL检查Active Directory中的当前用户权限。它使用GetAuthorizationGroups方法,工作得很好。DLL大约在10年前的VS 2005中编译。现在我需要对其代码做一些更改(未连接到Active Directory)。我在VS2012框架3.5中打开了源代码,编译并复制到网站的服务器上。现在,不属于此服务器的Administrators组的用户出现错误: 尝试检索授权组时,出现错误(5) 旧版本的DLL或用户处于管理状态时出现no错误。 下面是我使用的代码:

PrincipalContext ctx= 新PrincipalContext(ContextType.Domain、domainName、adusername、adpassword)
用户主要用户= UserPrincipal.FindByIdentity(ctx,userID)
PrincipalSearchResult groups=user.GetAuthorizationGroups()

该服务器在Windows server 2012下工作。
任何帮助都将不胜感激。

我在.net 3.5中编译了您的代码,并将userID替换为adusername,请尝试将IdentityType作为参数传递(如下所示)


您需要将其作为运行的上下文(如果应用程序池是网络服务,则为计算机帐户)添加到AD中的Windows授权访问组。这将授予请求者对相关属性的读取权限

如果您仅在NETFramework 3.5中编译此项目,我建议在.NETFramework 3.5中编译整个解决方案,并将所有内容一起部署。仅在开发环境中测试它。该网站也在3.5中重新编译。这没有帮助。不属于管理员组的用户会出错,但我假设属于管理员组的用户工作正常。是吗?是的,我在问题中写了这个。谢谢你的回答。不幸的是,我得到了相同的结果:在尝试检索授权组时,出现了一个错误(5)。对不起,我没有完全复制您的代码。现在我在UserPrincipal user=UserPrincipal.FindByIdentity(ctx,userID)上得到了一个错误;谢谢你的回答。我应该致电AD管理员向Windows授权访问组添加帐户。什么是机器帐户?我尝试在不同的应用程序池下运行该网站。特别是在作为此计算机管理员的域用户下运行的池下。如果我将其添加到Windows授权访问组中是否足够?计算机帐户是计算机的AD帐户-它与计算机的主机名相同。如果应用程序池作为网络服务运行,您的广告管理员应将计算机帐户添加到组中。否则,请将应用程序池正在运行的域帐户添加到组中。谢谢,@brian desmond,我明天会尝试。我检查了你的建议,但也失败了。应用程序池的域帐户已添加到Windows授权访问组,但我收到相同的错误:在尝试检索授权组时,出现错误(5)(如果用户不是网站管理员)。
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domainName,
adusername, adpassword);
UserPrincipal user = UserPrincipal.FindByIdentity
(ctx, IdentityType.SamAccountName, adusername);
PrincipalSearchResult groups = user.GetAuthorizationGroups();