【问题标题】:GetAuthorizationGroups works with administrator user onlyGetAuthorizationGroups 仅适用于管理员用户
【发布时间】:2016-01-22 19:29:56
【问题描述】:

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

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

服务器在 Windows Server 2012 下运行。 任何帮助将不胜感激。

【问题讨论】:

  • 如果您只在net framework 3.5 中编译这个项目,我建议在.net framework 3.5 中编译整个解决方案并将所有内容一起部署。仅在开发环境中进行测试。
  • 该网站也在 3.5 中重新编译。它没有帮助。
  • 不属于管理员组的用户会出错,但我认为属于管理员组的用户可以正常工作。对吗?
  • 是的,我在我的问题中写了这个。

标签: c# web permissions active-directory


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答。不幸的是,我得到了相同的结果:在尝试检索授权组时,发生错误 (5)
  • 对不起,我没有完全复制你的代码。现在我在 UserPrincipal user = UserPrincipal.FindByIdentity(ctx, userID); 上遇到错误
【解决方案2】:

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

【讨论】:

  • 感谢您的回答。我应该打电话给 AD 管理员添加一个帐户到 Windows 授权访问组。什么是机器账户?我试图在不同的应用程序池下运行网站。特别是在本机管理员域用户下运行的池下。如果我将它添加到 Windows 授权访问组就足够了吗?
  • 机器账号是电脑的AD账号——和机器的主机名一样。如果应用程序池作为网络服务运行,您的 AD 管理员应将计算机帐户添加到组中。否则,将应用程序池正在运行的域帐户添加到组中。
  • 谢谢@brian-desmond,我明天试试。
  • 我检查了您的建议,但也失败了。应用程序池的域帐户已添加到 Windows 授权访问组,但我收到相同的错误:尝试检索授权组时,发生错误 (5)(如果用户不是网站管理员)。
猜你喜欢
  • 2018-08-29
  • 2020-02-18
  • 1970-01-01
  • 2015-03-03
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多