By Ben
Authorization and Profile Application Block 1.0研究报告
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
下载位置:http://www.microsoft.com/downloads/details.aspx?FamilyId=BA983AD5-E74F-4BE9-B146-9D2D2C6F8E81&displaylang=en
安装后运行 [安装位置] \Security\Database\Profile.sql 安装profile存储数据库(demo使用).
(过程略)
2.2. 研究环境WinXP, SQL Server 2000 + SP3A, .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设计架构

也由此可知Authorization与 Profile是基本独立管理的, 管理结构也基本相同.
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:
Initialize
Object Create
IdentitiesSupported
可选:
è IProfileReaderProvider
è IProfileWriterProvider
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转换: tlnimp 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.xml</storeLocation>
<identitiesSupported>
<identityName>primaryIdentity</identityName>
</identitiesSupported>
</provider>
<provider name="AzXmlProvider" type="Microsoft.ApplicationBlocks.Security.Authorization.AzXmlProvider, Microsoft.ApplicationBlocks.Security.Providers">
<storeLocation>AzXmlProvider.xml</storeLocation>
<identitiesSupported>
<identityName>primaryIdentity</identityName>
</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