在这个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
引用本地组的明确方式吗?
答案 0 :(得分:6)
按照我的教程How to Create an Intranet Site Using ASP.NET MVC您需要使用内置的AspNetWindowsTokenRoleProvider类,该类使用Windows组作为角色
[Authorize(Roles = @"BUILTIN\Administrators")]
仅在您是IIS服务器上的管理员时才有效。如果将应用程序部署到公司的生产服务器,则需要在生产服务器上成为本地管理员。
答案 1 :(得分:0)
您可以将自定义AD授权属性放置在每个操作或控制器上方。我以前做过这个并且做了一些非常类似于下面链接的事情。如果您使用的是表单身份验证而不是Windows,则此方法有效。