【问题标题】:How do I make AuthorizeAttribute work with local Administrators group in ASP.NET MVC 3 intranet application?如何使 AuthorizeAttribute 与 ASP.NET MVC 3 Intranet 应用程序中的本地管理员组一起工作?
【发布时间】:2011-12-27 14:41:16
【问题描述】:

在这个 ASP.NET MVC 3 Intranet 应用程序(使用 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 引用本地组的最终方式吗??

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,这与我发现的相符(必须使用“BUILTIN”限定Administrators)。
    【解决方案2】:

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

    Active Directory Authorization based on Groups

    【讨论】:

    • Administrators 组是本地的,问题是否与 AD 组相同?
    • 查看您所指问题的较新答案,它说您基本上可以在 web.config 中使用System.Web.Security.WindowsTokenRoleProvider。这已经添加到我的 web.config 中,我假设是 Intranet 应用程序模板,所以我认为针对 AD 的身份验证已经可以工作。例如,我能够针对我的特定用户进行授权:[Authorize(Users = @"ad\arve")]
    • 这是不正确的。请参阅我在 MSDN 上的文章 How to Create an Intranet Site Using ASP.NET MVC msdn.microsoft.com/en-us/library/gg703322(VS.98).aspx 你需要使用 AspNetWindowsTokenRoleProvider 类
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 2019-11-20
    • 2012-02-14
    相关资源
    最近更新 更多