首页 文章

使用AD的MVC3授权

提问于
浏览
4

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

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

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

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

3 回答

  • 2

    您可以使用Roles属性:

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

    这是一个解释步骤的tutorial .

  • 4

    我正在使用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组的名称 .

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

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

  • 2

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

相关问题