如何使AuthorizeAttribute与ASP.NET MVC 3 Intranet应用程序中的本地Administrators组一起使用?

时间:2011-12-27 14:41:16

标签: asp.net-mvc asp.net-mvc-3 authorization

在这个ASP.NET MVC 3内部网应用程序(使用MVC 3 Intranet Application 模板创建)中,用户根据AD自动进行身份验证,我试图限制对用户的控制器访问本地Administrators组。为了达到这个目的,我试图像这样应用AuthorizeAttribute

[Authorize(Roles = "Administrators")]
public class ElmahController : Controller

但是,即使我的AD用户(应用程序报告预期用户已通过身份验证)位于本地Administrators组中,但在应用AuthorizeAttribute时无法访问控制器。只出现一个空白页面。我做错了什么?

另一方面,我已经确认指定我的特定用户有效:

[Authorize(Users = @"ad\arve")]
public class ElmahController : Controller

在这种情况下,我可以成功检索受限制的页面。

修改 我发现使用BUILTIN对该小组进行了限定:

[Authorize(Roles = @"BUILTIN\Administrators")]

这是通过AuthorizeAttribute引用本地组的明确方式吗?

2 个答案:

答案 0 :(得分:6)

按照我的教程How to Create an Intranet Site Using ASP.NET MVC您需要使用内置的AspNetWindowsTokenRoleProvider类,该类使用Windows组作为角色

[Authorize(Roles = @"BUILTIN\Administrators")]

仅在您是IIS服务器上的管理员时才有效。如果将应用程序部署到公司的生产服务器,则需要在生产服务器上成为本地管理员。

答案 1 :(得分:0)

您可以将自定义AD授权属性放置在每个操作或控制器上方。我以前做过这个并且做了一些非常类似于下面链接的事情。如果您使用的是表单身份验证而不是Windows,则此方法有效。

Active Directory Authorization based on Groups