正确设计的授权机制使系统更易部署和管理基于Active Directory等企业身份验证机制来授权你的应用程序就能与公司现有的安全策略无缝地集成在n层应用程序中每一层都可使用授权从而创建出更灵活的系统
在表示层你可基于授权用户的角色来自定义用户界面(例如为管理阶级的用户显示管理菜单但在普通用户面前隐藏此菜单)在业务层可考虑在代码主体中验证授权这就使黑客或其他非法用户不易在未经正确授权的情况下使用一个代码小节在数据层通过在检索或插入数据之前请求授权可确保只有合法用户才能更改数据
授权类型
NET系统主要运行种授权类型Windows授权代码访问安全性(Code Access SecurityCAS)授权或者应用程序专用授权综合运用这些授权机制就能创建一个非常安全的系统下面让我们详细讨论它们
Windows授权
利用访问控制列表(Access Control ListsACL)来设置权限系统管理员可控制哪些用户有权访问特定的系统资源通常要由运行应用程序的那个系统的管理员来控制这些设置由于生产环境和测试/认证环境中的管理员通常是不同的人所以必须正确文档化特定的授权设置确保应用程序最终能正确运行这些设置包括
Active Directory权限
NTFS管理的文件权限
Web Config设置它为基于ASPNET的应用程序限制对特定URL的访问
服务器产品的特有权限产品包括Microsoft SQL Server(例如表视图或存储过程)或者Microsoft Exchange(例如邮箱公共文件夹等)
CAS授权
Windows授权限制对单个对象的访问相反CAS授权允许应用程序根据一系列批准的权限(名为权限集)来执行这些权限集是基于凭证(evidence)而建立的包括代码的来源它的出版商及其强名称必须注意到CAS授权独立于其他任何授权机制运行这样可有效保护系统资源无论用户被验证成什么身份
例如假定一个权限集禁止来自因特网的代码删除用户机器上的文件那么这个限制将永远有效无论用户的身份被验证成系统管理员还是验证成来宾可用Caspolexe命令行实用程序来配置CAS授权或使用Microsoft NET Framework Configuration控制台来配置(后者通过控制面板的管理工具来访问)
应用程序专用授权
即使Windows授权用户执行一个操作而且正在执行的代码具有恰当的权限但它们还要通过第道关卡的考验——你的应用程序可决定是否授权特定用户执行操作通过创建应用程序专用的一个授权框架就可根据用户的身份验证主体(authenticated principal)来响应不同的用户并进一步控制用户有权采取的操作这种授权机制主要用于管理或限制对特定应用程序资源的访问或根据通过身份验证的主体来强制不同的业务规则
我在自己的Web和Windows应用程序中广泛运用了应用程序专用授权在Web应用程序中我通常用它动态生成菜单使用户只看到他们有权看到的选项对于Windows应用程序我将授权代码嵌入业务逻辑中防止用户执行需要更高级授权的代码为了有效地使用和管理授权你需要一个公共场所来存储权限而且要采取一种方式为用户分组这样一来一旦权限需要更改就不必单独配置每个用户
角色的作用
NET框架允许你对一个用户组授权利用角色为组内的所有用户指派相同的安全权限由于管理的是角色而非单独的用户所以当用户四处移动时你的应用程序无需改变另外假定你管理的是个角色而不是名用户那么花在管理应用程序上的时间明显少得多使用Active Directory来存储身份验证信息你的NET应用程序就能自动使用Active Directory中内建的用户和角色能力此外使用与SQL Server集成的安全机制可以扩展这些角色将权限关联到SQL Server对象从而将安全性提升到一个新台阶而且无需额外的编码
即使决定不使用Active Directory也可直接针对IPrincipal对象和IsInRole方法来编程从而指派来自外部存储(例如SQL数据库表XML文件或者使用套接字等接口的一个外部系统)的角色并验证角色的成员关系
授权是任何NET系统的关键设计元素理解了种主要的授权类型后你可在设计自己的系统时选用其中的一种或者多种