【问题标题】:MVC3 authorization using AD使用 AD 的 MVC3 授权
【发布时间】:2011-05-23 18:31:08
【问题描述】:

是否可以使用 AD 授权/拒绝 MVC3 应用程序的用户?

我的应用程序目前使用 Windows 身份验证进行保护,但这意味着将用户添加到 Win2007 服务器上的组。

我想更改这一点,以便根据他们的 AD 角色允许/拒绝用户访问应用程序/和控制器操作/视图,因此他们要么自动登录(如 Windows 身份验证),要么被重定向到“拒绝”页面。

非常感激地接受任何帮助...我发现的一切似乎都基于 Windows 组或表单身份验证。

【问题讨论】:

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


    【解决方案1】:

    您可以使用 Roles 属性:

    [Authorize(Roles = @"SOMEDOMAIN\somegroup")]
    public ActionResult Foo()
    {
        ...
    }
    

    这是一个tutorial,它解释了这些步骤。

    【讨论】:

    • 所以在我的示例中设置AspNetWindowsTokenRoleProvider 是多余的吗?它应该在启用 WindowsAuth 的情况下“正常工作”?
    • 我看过教程,但它表明这些是 Win2k7“角色”而不是 AD 角色。另外,你能用“角色”阻止对网站的任何访问吗?例如管理员/用户可以访问网站,管理员可以访问更多页面,其他人都点击“未经授权”页面?
    • 如果您的用户通过 AD 在域上进行身份验证,则 WindowsToken 包括从 AD 分配的组。您绝对可以使用角色阻止所有访问;好吧,您可以将 AuthorizeAttribute 应用于每个控制器。
    • Thankyou Hometoast:最后一个愚蠢的问题 - 如何将整个站点设置为仅允许某些角色?我只是在 webconfig 中输入“允许”“\\domain\usergroup\”吗?
    • @BlueChippy,您可以在Global.asax:filters.Add(new AuthorizeAttribute { Roles = @"SOMEDOMAIN\somegroup" }); 中将 AuthorizeAttribute 注册为全局操作过滤器。我会避免使用 web.config 中的 Allow 部分来控制 ASP.NET MVC 应用程序中的授权。
    【解决方案2】:

    我正在为我的 Intranet 应用程序使用 AD 组。

    <authentication mode="Windows" />
    <roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
      <providers>
        <clear />
        <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
      </providers>
    </roleManager>
    

    然后将授权属性添加到我需要保护的控制器操作中:

    [Authorize(Roles = MyNamesspace.Constants.MANAGER_GROUP)]
    public ActionResult Blah() {...
    

    在视图中,您可以使用User.IsInRole 及其 AD/Windows 组的名称。

    或者获取网络服务器从该用户看到的角色列表:System.Web.Security.Roles.GetRolesForUser();

    警告:我的服务器和我的客户端都在同一个域中。如果您需要针对您的 ActiveDirectory 对站点外的 Web 客户端执行相同的操作,这将不起作用。

    【讨论】:

      【解决方案3】:

      只需使用 Asp.net 内置的Membership provider 框架。您会发现已经有一个开箱即用的ActiveDirectoryMembershipProvider,但您必须自己实现RoleProvider,因为在不同的网络中可以以不同的方式定义成员资格。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-19
        • 1970-01-01
        • 1970-01-01
        • 2016-08-02
        相关资源
        最近更新 更多