• 在Asp.net MVC中使用Authorization Manager (AzMan)进行Windows用户身份认证


    背景

    创建需要通过Windows用户进行身份认证的Asp.net MVC应用

    要点

    在Asp.net MVC应用基于Windows用户进行身份认证的方法有很多,如MVC自带的Windows认证就经常被用到。但AzMan(Authorization Manager)提供了在某些场合下相对更灵活多样,更易于维护的快速解决方案。

    AzMan是在Microsoft提供的一套授权管理的组件,底层支持XML/AD/ADAM/SQLServer(Vista Only)的存储方式。

    Authorization Manager的抽象逻辑结构由四类基本对象构成,分别为用户(Member)、角色(Role)、任务(Task)和操作(Operation):
    用户 - 用户可以是一个有效的Windows系统账号、AD/ADAM中定义的账号,也可以是完全由应用系统管理和分配的第三方账号;一个用户可以赋予多个角色权限;
    角色 - 角色是一组任务和操作的抽象集合,每个角色可以包含一到多个的任务和操作,另外,也可以包含其它角色,形成“角色组”式的灵活再组合;
    任务 - 任务是一组操作的抽象集合,每个任务可以包含一到多个的操作,另外,也可以包含其它任务,构成灵活的任务叠加组合;
    操作 - 操作代表系统中的最小功能单位,不可再拆分,也不能再包含其他操作,每个操作都包含一个应用域内唯一的ID标识;

    步骤
     
    Step 1. 安装AzMan
     
    在Windows 2003及更高版本的Windows中,系统会默认包含AzMan。微软这篇文档详细介绍如何在必要时在不同的Windows下安装AzMan: http://msdn.microsoft.com/en-us/library/ff649313.aspx
     
    Sep 2. 创建AzMan授权管理库
     
    2.1 运行命令行azman.msc
     
    2.2 打开Authorization Manager界面

    2.3 默认AzMan处于管理员模式,如需要创建新的授权管理库,需要切换到开发者模式。在主菜单中选择[操作]-[选项...]

    2.4 弹出对话框中选择开发者模式,[确定]

    2.5 新建策略库:[操作] - [新授权管理库...]

    2.6 选择相应选项,本例中选择XML文件格式。 Schema V2.0,需要指定库文件所在路径及文件名

    2.7 新库创建完成,界面类似下图所示:

    2.8 创建新的应用程序:鼠标右键点击新建的库文件,弹出菜单中选择[新应用程序...]

    2.9 输入应用程序名字

    2.10 新应用程序创建完成

    3. 创建角色

    3.1 在[定义] - [角色]节点下右击鼠标,弹出菜单中选择[新角色定义...],在弹出菜单中填写角色名称等相应信息

     

     

    3.2 依次建立所有所需的角色: Admin, User, NoAccess

    3.3 角色分配节点右击鼠标,选择[新的角色分配...]

    3.3 勾选刚刚创建的角色,[确定]

    3.4 相应角色处点右键,[分配用户和用户组] - [从Windows和活动目录...]

    3.5 以此添加Windows用户或用户组至对应的角色

    4. 配置Windows MVC项目

    4.1 启动Visual Studio,新建一个Asp.net MVC项目

    4.2 复制创建好的库文件之MVC项目目录下的App_Data目录。如果MVC项目事先已经创建,可以在创建AzMan库文件时直接指定到App_Data目录下,这样其实更方便

    4.2 创建Class: AuthorisationRoles.cs,内容如下:

            public const string SuperAdmin = "SuperAdmin";
            public const string User = "User";
            public const string NoAccess = "NoAccess";

     4.3 添加ConnectionString至web.config,定义到库文件的连接

      <connectionStrings>
        <add name="LocalPolicyStore" connectionString="msxml://~/App_Data/Authorization.xml"/>
      </connectionStrings>

     4.4 添加RoleManager定义到web.config文件system.web节点下

        <roleManager
          enabled="true"
          cacheRolesInCookie="true"
          defaultProvider="RoleManagerAzManProvider"
          cookieName=".DemoApplication"
          cookiePath="/"
          cookieTimeout="30"
          cookieRequireSSL="true"
          cookieSlidingExpiration="true"
          createPersistentCookie="false"
          cookieProtection="All">
          <providers>
            <add name="RoleManagerAzManProvider"
                    type="System.Web.Security.AuthorizationStoreRoleProvider, System.Web, Version=2.0.0.0, 
                        Culture=neutral, publicKeyToken=b03f5f7f11d50a3a"
                    connectionStringName="LocalPolicyStore"
                    applicationName="DemoApplication"/>
          </providers>
        </roleManager>

     5. 在MVC中进行角色认证。在需要限定访问权限的类或方法前用Authoize修饰,如下所示

        [Authorize(Roles=AuthorisationRoles.SuperAdmin + "," + AuthorisationRoles.User)]
        public class HomeController : Controller
        {
        }
    心得
     
    实际应用中发现AzMan的确在特定场景下可以大大加快开发速度,降低维护成本。因为AzMan是已经封装好了最常用到的基于角色/任务/操作的权限分配和管理工具,Asp.net可以直接调用,因此加快了开发速度。如应用程序使用的环境经常需要针对特定用户的权限变更(增删改),AzMan.msc可以快速地完成所需操作,因此降低了维护成本
     
    因本例中使用的是基于文件存储的库,因此第一次发布MVC应用需同时发布该库文件(App_Data文件夹下)。但之后可能对权限的维护是针对已发布的线上库文件进行,所以后续发布要小心不要用开发测试的库文件覆盖线上的库文件,在对线上库文件进行修改前,适当备份也可降低风险。
     
  • 相关阅读:
    小程序面试题及答案
    Git常用指令
    《剑指offer》面试题23 从上往下打印二叉树 Java版
    《剑指offer》面试题22 栈的压入、弹出序列 Java版
    《剑指offer》面试题21 包含min函数的栈 Java版
    《剑指offer》面试题20 顺时针打印矩阵 Java版
    《剑指offer》面试题19 二叉树的镜像 Java版
    《剑指offer》面试题18 树的子结构 Java版
    《剑指offer》面试题17 合并两个排序的链表 Java版
    《剑指offer》面试题16 反转链表 Java版
  • 原文地址:https://www.cnblogs.com/heuyang/p/4977251.html
Copyright © 2020-2023  润新知