vb.net数字签名 数字签名代码实现( 三 )


图 1.主机和组合为策略评估器提供证据,评估器使用安全策略和许可请求确定组合的许可权限 。应用程序中不同运行组件的许可权限然后用于作出授权决定 。
代码访问安全堆栈遍历可以保护代码不受攻击 。在精通的攻击中 , 恶意代码欺骗受信任代码执行它独自不能运行的操作--有效地利用代码的许可权限实现恶意的目的 。对这类攻击,开发人员很难进行防备--但堆栈遍历确保了如果涉及到了低级信任等级的代码,有效许可将被减少到信任等级最低的代码具有的许可 。
结果,代码将从源处获得不同的信任等级,并在适合于特定的代码执行环境的限制下运行 。
.NET Framework调用的"自由"安全性
一些活动,如读写文件,显示对话框,读写环境变量,可以通过包含在框架安全构架中的.NET Framework方法实现 。这就使.NET Framework能根据安全策略允许或不允许一个操作,而不需要程序员做额外的工作 。尽管暴露了保护资源的管理类的创建者在他们的库中做了明确的安全需求,使用.NET Framework类库访问受保护资源的开发人员可以自由地利用代码访问安全系统;他们不必作出明确的安全调用 。
管理员可以通过决定给予哪些许可来优化安全策略,然后,依靠.NET Framework处理所有的安全操作 。代码访问安全能阻止大部分的恶意攻击 , 对代码的验证减少了缓存溢出和其它会导致安全攻击的不期望的行为 。因此,应用程序和组件生来就受到了保护,它们免于大多数安全问题的冲击,而这些安全问题一直困绕着本地代码的实现 。
基于角色的安全
有时根据已认证的身份或根据与代码执行上下文相关的角色作出认证决定是合适的 。例如,金融和企业软件可以通过评估角色信息的企业逻辑加强策略 。根据作出请求的用户角色可以对金融交易的数据进行限制 。出纳被允许可以处理一定金额的请求,而多于该金额的所有工作需要监督人的角色来处理 。
身份可以映射到登录系统的用户,或由应用程序定义 。相应的原则封装了身份和其它相关的角色信息(例如,但并不限于此,用户的"组"由操作系统定义) 。
认证和授权
认证是一个过程 , 它接收来自用户的证书,并对证书的授权进行确认 。如果证书是有效的,那么用户就可以说他拥有已认证的身份 。而授权的过程是:确定认证用户是否能够访问给定的资源 。认证可通过系统或企业逻辑来完成 , 通过某个API它是或获得的 。认证API是完全可扩展的,因此开发人员根据需要使用自己的企业逻辑 。开发人员可以对他们的认证需求进行编码 , 也可以修改底层的认证方法而无需对他们的代码作太大变化 。除了微软Windows?操作系统身份认证外,还有的认证方法包括基本HTTP,摘要和 Kerberos , 以及微软Passport和基于窗体的认证 。这些认证方法已经完全集成到ASP.NET中了 。
在ASP.NET窗体认证中,用户提供证书,并提交窗体 。如果应用程序簦别请求 , 系统发送一个cookie  , 该cookie以某种形式包含包含了证书或包含重新获得身份的关键字 。接下来发送的请求在头中包含了cookie,ASP.NET处理程序通过应用程序所期望的任何有效方法对这些请求认证和授权 。如果请求没有经过认证,HTTP客户端将用于把请求发送到认证窗体,在那里用户可能提供信任证书 。窗体认证有时用于个性化--为已知用户的内容进行定置 。在一些情况下,身份是问题所在而不是认证,因此用户的个性化信息可以简单地通过访问用户或获得 。
授权的目的是确定作出请求的身份是否被给予了对给定资源的访问权 。ASP.NET提供了两种类型的授权服务:文件授权和URL授权 。文件授权根据正在作用的方法和作出请求的身份决定用户使用于哪个访问控制列表 。URL授权是URI名称空间和不同用户或角色间的逻辑映射 。

推荐阅读