2015-10-23 106 views
0

Intranet中的我的网站(使用Windows验证)使用某些DLL来检查Active Directory中的当前用户权限。它使用方法GetAuthorizationGroups并且完美地工作。该DLL大约在10年前在VS 2005中进行了编译。现在,我需要对其代码进行一些更改(未连接到Active Directory)。我在VS 2012,framework 3.5中打开源代码,编译并复制到网站的服务器。现在,不属于此服务器的管理员组的用户会收到以下错误: 尝试检索授权组时,出现错误(5) 有n o旧版本DLL或用户出现错误administrato r。 以下是我使用的代码:GetAuthorizationGroups仅以管理员用户身份运行

PrincipalContext ctx = 新的PrincipalContext(ContextType.Domain,domainName,adusername,adpassword);
UserPrincipal user = UserPrincipal.FindByIdentity(ctx,userID);
PrincipalSearchResult groups = user.GetAuthorizationGroups();

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

+0

如果你只是在net framework 3.5中编译这个项目,我建议在.net framework 3.5中编译整个解决方案并将所有的东西一起部署。只在开发环境中进行测试。 –

+0

此外,网站在3.5重新编译。它没有帮助。 – eug100

+0

不属于管理员组的用户会出错,但我认为属于管理员组的用户可以正常工作。这是对的吗? –

回答

0

您的代码适用于我在.net 3.5中编译并使用adusername替换userID的用户,请通过传递IdentityType作为参数(如下所示)来尝试。

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domainName, 
adusername, adpassword); 
UserPrincipal user = UserPrincipal.FindByIdentity 
(ctx, IdentityType.SamAccountName, adusername); 
PrincipalSearchResult groups = user.GetAuthorizationGroups(); 
+0

谢谢你的回答。不幸的是,我得到了相同的结果: 虽然试图检索授权组,发生了错误(5) – eug100

+0

对不起,我没有复制你的代码。现在我在 UserPrincipal user = UserPrincipal.FindByIdentity(ctx,userID); – eug100

0

您需要添加此运行的环境(计算机帐户,如果应用程序池是网络服务)到Windows授权访问组在AD。这授予请求者读取相关属性的权限。

+0

谢谢你的回答。我应该致电AD管理员向Windows授权访问组添加帐户。什么是机器账户?我试图在不同的应用程序池下运行该网站。特别是在作为本机管理员的域用户下运行的池。如果我将它添加到Windows授权访问组是否足够? – eug100

+0

机器帐户是计算机的AD帐户 - 它与机器的主机名相同。如果应用程序池作为网络服务运行,则AD管理员应将该计算机帐户添加到该组。否则,请将该应用程序池正在运行的域帐户添加到组中。 –

+0

谢谢你,@布赖恩 - 德斯蒙德,明天我会试试。 – eug100

相关问题