背景

创建需要通过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文件夹下)。但之后可能对权限的维护是针对已发布的线上库文件进行,所以后续发布要小心不要用开发测试的库文件覆盖线上的库文件,在对线上库文件进行修改前,适当备份也可降低风险。
 

在Asp.net MVC中使用Authorization Manager (AzMan)进行Windows用户身份认证的更多相关文章

  1. (转)Asp.Net MVC中身份认证和授权

    MVC自带的ActionFilter 在Asp.Net WebForm的中要做到身份认证微软为我们提供了三种方式,其中最常用的就是我们的Form认证,需要配置相应的信息.例如下面的配置信息: < ...

  2. 转载 ASP.NET MVC中使用ASP.NET Identity

    转载原地址: http://blog.jobbole.com/90695/ 在之前的文章中,我为大家介绍了OWIN和Katana,有了对它们的基本了解后,才能更好的去学习ASP.NET Identit ...

  3. [转]ASP.NET MVC中你必须知道的13个扩展点

    本文转自:http://www.cnblogs.com/ejiyuan/archive/2010/03/09/1681442.html ScottGu在其最新的博文中推荐了Simone Chiaret ...

  4. Asp.net MVC中的ViewData与ViewBag

    Asp.net MVC中的ViewData与ViewBag 在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下: ViewData ViewBag 它 ...

  5. ASP.NET MVC中使用Ninject

    ASP.NET MVC中使用Ninject 在[ASP.NET MVC 小牛之路]系列上一篇文章(依赖注入(DI)和Ninject)的末尾提到了在ASP.NET MVC中使用Ninject要做的两件事 ...

  6. 在ASP.NET MVC中使用Castle Windsor

    平常用Inject比较多,今天接触到了Castle Windsor.本篇就来体验其在ASP.NET MVC中的应用过程. Visual Studio 2012创建一个ASP.NET MVC 4网站. ...

  7. ASP.NET Identity系列02,在ASP.NET MVC中增删改查用户

    本篇体验在ASP.NET MVC中使用ASP.NET Identity增删改查用户. 源码在这里:https://github.com/darrenji/UseIdentityCRUDUserInMV ...

  8. ASP.NET MVC中你必须知道的13个扩展点

         ScottGu在其最新的博文中推荐了Simone Chiaretta的文章13 ASP.NET MVC extensibility points you have to know,该文章为我 ...

  9. 在 Asp.NET MVC 中使用 SignalR 实现推送功能 [转]

    在 Asp.NET MVC 中使用 SignalR 实现推送功能 罗朝辉 ( http://blog.csdn.net/kesalin ) CC许可,转载请注明出处 一,简介 Signal 是微软支持 ...

随机推荐

  1. jquery.idTabs使用方法

    idTabs是基于Jquery编写封装的一个插件,主要用于实现选项卡功能,它操作简单,只需到官网:http://www.sunsean.com/idTabs/下载插件JS脚本文件,并引用到网站中即可 ...

  2. KeyValue Config

    public class ConfigHelper { public static ScriptsHelper Scripts { get { return new ScriptsHelper(); ...

  3. sprint3(第六天)

    由于昨天下午晚上停电又没网,所以我们没做成什么功能,而且也没发博客. 今天燃尽图:

  4. Microsoft Visual Studio 2012 文档 下载地址 vs2012 中文帮助文档

    https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=34794 下载地址: http://download.microsoft. ...

  5. SQL查询作业执行情况

    查询作业的执行情况sql: SELECT [JobName] = JOB.name, [Step] = HIST.step_id, [StepName] = HIST.step_name, [Mess ...

  6. Javascript小笔记

    1.315360000000 毫秒 = 10年 2.Javascript 取时间截: JavaScript 获取当前时间戳: 第一种方法: var timestamp = Date.parse(new ...

  7. java 接口学习

    你应该知道接口是一种契约,它与实现方式无关 但是类,即使是抽象类,你都能自定义成员变量,而成员变量往往就与实现方式有关. 这一点的实际意义不大. 但是有一点,类会暴露太多不必要,甚至不能暴露的东西,你 ...

  8. 【转载】JS获取屏幕大小

    前些日子需要给项目的弹窗上面罩,因为项目左侧是树形菜单,右侧嵌套的iframe ,iframe 的内容不是固定大小,那么,面罩的大小也就不是固定的 因此,用到了JQuery获取当前页面的窗口大小,于是 ...

  9. DIV嵌套垂直居中

    第一记住一点:父级相对定位,子级绝对定位 下面演示CSS样式: .父级DIV{ margin:0px auto; position:relative; border:2px solid #ff0000 ...

  10. 【jQuery基础学习】08 编写自定义jQuery插件

    目的:虽然jQuery各种各样的功能已经很完善了,但是我们还是要学会自己去编写插件.这样我们可以去封装一些项目中经常用到的专属的代码,以便后期维护和提高开发效率. jQuery插件的类型: 封装对象方 ...