使用AD的MVC3授权

时间:2011-05-23 18:31:09

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

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

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

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

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

3 个答案:

答案 0 :(得分:4)

您可以使用角色属性:

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

这是一个解释步骤的tutorial

答案 1 :(得分:2)

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

<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>

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

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

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

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

警告:我的服务器和我的客户都在同一个域上。如果您需要针对ActiveDirectory对网站外的Web客户端执行相同操作,则无法使用此功能。

答案 2 :(得分:2)

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