By Ben
Authorization and Profile Application Block 1.0研究报告<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
1.课题简介
利用WindowsPrincipal或GenericPrincipal可以实现验证授权. 但权限只能分到角色. 利用Authorization and Profile Application Block 1.0 不仅有效实现权限分配到角色, 更能分配到任务, 操作.
2.研究过程
2.1.概述
Authorization and Profile Application Block是一个.net验证授权开发工具. 基于windows passport管理和NTLM 等实现用户验证授权.
利用AzMan实现很方便灵活地实现Authorization、可以随意定制profile内容方便开发使用、可以有多种profile数据存储介质……
运行Authorization and Profile Application Block对系统需求环境l:
1) .NET Framework version 1.1
2) 数据存储(比如:profile数据使用Sql保存, 则需要Sql Server)
3) Windows Server 2003 or Windows 2000 Server with Service Pack 4 (因为Block的AzManProvider需要Authorization Manager [AzMan])
三大组件:
1) Microsoft.ApplicationBlocks.Security.dll 此Block的一些对象概念定义层
2) Microsoft.ApplicationBlocks.Common.dll 此Block的Provider定义层
3) Microsoft.ApplicationBlocks.Security.Providers.dll 可以插入应用系统business层的Provider的逻辑层
安装Block
安装后运行 [安装位置] \Security\Database\Profile.sql 安装profile存储数据库(demo使用).
(过程略)
2.2. 研究环境
WinXP, SQL Server 2000 + SP<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><chmetcnv w:st="on" unitname="a" sourcevalue="3" hasspace="False" negative="False" numbertype="1" tcsc="0">3A</chmetcnv>, .Net
附件:(点击下载Demo附件)
DemoApp项目: win应用项目
Microsoft.Interop.Security.AzRoles.dll: Authorization Manager
Common 项目: Auth Pro 提供
Security/Security项目: Auth Pro提供
Security/Providers项目: Auth Pro提供的Authorization 和Profile的处理器
2.3.研究思路
1. 了解熟悉asp.net 一般验证授权的所有做法
2. 认识Authorization and Profile Application Block
3. 配置Authorization and Profile Application Block开发使用环境
4. 使用Block, 设计profile解决方案demo
5. 使用Block, 设计Authorization解决方案demo
6. 总结使用Block的使用和设计思想
2.4.Block设计架构
Configuration: 可以保存到config文件里或其他介质 数据存储: 可以是sql, xml等介质
| 由架构图可以看出Block主要实现或提供了什么
1. Extended Principal
普通的WindowsPrincipal或GenericPrincipal实现不了复杂的业务, ExtendedPrincipal继承IPrincipal基础上还自定义了: Bool CheckAccess 根据是否有权限 StringCollection GetRoles 获所有角色
2. Authorization Provider Interface
提供IAuthorizationProvider: Initialize StringCollection GetRoles Bool CheckAccess
3. Profile Provider Interface
提供 IProfileProvider: 可选: è IProfileReaderProvider |
2.5.Authorization 模块
2.5.1.开发应用
è 在自定义的solution里加入Block提供的Common, Security两个Project
è 新建Providers项目, 用来处理Authorization的逻辑之用. 引用Common和Security项目
è 创建自定义的Provider class, 必须:Based on IAuthorizationProvider并实现它的三个方法
这里介绍使用XML和AzMan管理用户权限两种开发应用方法
1) 使用XML
如附件中Providers项目下的Authorization/AzXmlProvider.cs. 主要是CheckAccess 方法中根据当前用户的请求, 从AzXmlProvider.xml 对应配置位置检查用户是否有权限执行任务.
2) 使用AzMan
如果使用AzMan(windows 2003 administration tools/windows 2000 server sp4中自带的Authorization Manager), 则要引用Microsoft.Interop.Security.AzRoles.
方法简介:
1. 在c:/windows/system32下找到azRoles.dll
2. 使用.net 1.1自带的tlbimp command line 工具将azroles.dll这个COM dll转换:tlbimp azroles.dll /out: Microsoft.Interop.Security.AzRoles.dll /namespace: Microsoft.Interop.Security.AzRoles
3. Providers项目再引用Microsoft.Interop.Security.AzRoles.dll
4. 在Authorization Manager的MMC上设置用户权限(略)
如附件中Providers项目下的Authorization/AzManProvider.cs. 实现IAuthorizationProvider 的三个方法都是调用AzMan的方法.
2.5.2.Configuration的设置
设置要引用的Provider
如附件的app.config:
authorizationProviders> provider name="azmanProvider" type="Microsoft.ApplicationBlocks.Security.Authorization.AzManProvider, Microsoft.ApplicationBlocks.Security.Providers"> storeLocation>msxml://c:/AzMan.xmlstoreLocation> identitiesSupported> identityName>primaryIdentityidentityName> identitiesSupported> provider> provider name="AzXmlProvider" type="Microsoft.ApplicationBlocks.Security.Authorization.AzXmlProvider, Microsoft.ApplicationBlocks.Security.Providers"> storeLocation>AzXmlProvider.xmlstoreLocation> identitiesSupported> identityName>primaryIdentityidentityName> identitiesSupported> provider> authorizationProviders> |
附件定义了两个Authorization Provider: Microsoft.ApplicationBlocks.Security.Authorization.AzManProvider和Microsoft.ApplicationBlocks.Security.Authorization.AzXmlProvider标识名分别是azmanProvider, AzXmlProvider.
应用Provider, 见代码:
ExtendedPrincipal principal = ExtendedPrincipal.Create(Thread.CurrentPrincipal.Identity); … … principal.AuthorizationProvider = "azmanProvider"; // or AzXmlProvider; |
2.6. Profile模块
略, 不重点介绍, 具体的请见附件DemoApp项目下的Form1.cs
3.总结
1) Authorization and Profile Application Block 1.0提供了接口, 可以让我们自定义Provider 来灵活实现用户的验证授权动作.
2) 权限分配可以细分到operation, 而且用户权限完全基于Authorization Manager(或XML等配置)来自由设置
3) 使用非常方便, 有效地提高验证授权的开发质量
4.参考资料
序号 | 名称 | 来源 |
1 | Help for Auth Pro AB 1.0 | Block的安装目录 |
2 | Designing Application-Managed Authorization.pdf | |
3 | MS - Building Secure ASP.NET Applications.pdf | |
4 | ||
5 | ||
6 |
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=210682