Acegi安全框架
程序员文章站
2022-03-24 11:10:49
...
Acegi是为基于Spring的应用提供的声明式安全框架。它通过在Spring的应用上下文中配置一系列的Bean完成安全设置,完成利用了Spring提供的依赖注入和IoC编程方式。
为了保证Web应用的安全需求,Acegi使用过滤器拦截servlet请求,并执行认证来执行安全措施。
Acegi通过安全方法级调用来执行更低层次的安全需求。通过使用Spring的AOP,Acegi使用代理对象来确保用户有适当的权限来调用被保护的方法。
无论是较高层次的Web应用的安全,还是较低层次的方法级安全,Acegi都可以通过四个主要组件完成安全需求。
Security Interceptor 用于拦截那些需要访问受保护资源的请求。
Authentication Managers 用于验证主体的身份,如你的principal(典型的如用户名)和你的Credentials(典型的如密码)。能过验证,可以证明Who are you 。
Access Decision Mangers 用于决定已验证通过的principal是否有访问受保护资源的特权。
Run-as Managers 尽管你通过了验证和并得到授权可以访问资源,但可能还会有更多的安全约束:例如,你可能得到了查看某个Web页面的权力,但是页面中可以还有比Web页面安全级别更高的对象。Run-as manager 正是用于这方面的验证。尽管这方面的需求不多,但Acegi通过Run-as Managers可以做到这一点。
管理验证
Acegi定义了AuthenticationManager接口,用于安全验证,同时提供了代理类ProviderManager以及它的相关实现,它们可以完成大部分相应的功能,而不需要我们自己开发。
通过Acegi和CAS实现SSO
耶鲁大学的CAS是SSO的一个解决方案。CAS的细节内容已经超出了本文的讨论范围。为了理解Acegi如何与基于CAS验证的应用相结合的问题,有必要看一下一个典型的CAS验证例子是如何工作的。详见前面研究过的CAS的文档。
你应该理解的一个关键概念就是这个受保护的应用根本不处理用户的Credentials。当用户打算登录应时时,实际上他们登录的是CAS Server.。应用根本不知道用户的Credentials。唯一要做的就是验证用户的ticket是否有效,这个ticket是由CAS Server 发放的。这是一件好事,因为它意味着只有一个应用(即CAS)负责处理用户的验证。
当CAS与Acegi配合使用时,Acegi要做的就是在应用上校验CAS ticket的工作。这使得应用本身可以不管CAS的身份验证过程。
Acegi通过CasAuthenticationProvider类达到这个目的,它不关心用户名和密码,而是接受一个CAS Ticket作为它的Credentials。除了配置CasAuthenticationProvider类以外,还需要在Spring的配置文件中配置其它几个辅助类,它们分别是.CasProxyDecider及其子类。
访问控制
身份验证只是Acegi的第一步。一旦Acegi知道用户是谁,接下来它必须决定用户是否有权访问被保护的资源。这是通过 Access Decision Managers完成的。Acegi定义了net.sf.acegisecurity.AccessDecisionManager接口,它的supports()方法决定该应用是否有权做出访问控制,decide()方法最终是否可以访问,如果不可以访问该资源,应抛出AccessDeniedException。
AccessDecisionManager有三个实现类,分别是net.sf.acegisecurity.vote.AffirmativeBased,net.sf.acegisecurity.vote.ConsensusBased
net.sf.acegisecurity.vote.UnanimousBased。AccessDecisionManager做出决定并不是通过它自己,而是把轮询一个或更多年对象,这些对象对这个用户是否有权访问受保护的资源进行投票。一旦得到所有的投票,AccessDecisionManager会对这些投票进行计数,并做出最终决定。
保护Web应用
Acegi对Web应用的保护是强依赖于过滤器的。这些过滤器在请求被应用处理之前进行拦截,并进行安全控制。根据应用的实际需求,Acegi可以使用6个过滤器,它们分别是
过滤器
|
功能
|
Channel-processing filter
|
确保请求是通过SSL提交的(HTTPS)
|
Authentication-processing filter
|
接受验证请求,并将其导向验证管理器进行验证
|
CAS-processing filter
|
接受CAS服务的ticket作为经过CAS验证的证明
|
HTTP Basic authorization filter
|
Processes authentication performed using HTTP Basic authentication
|
Integration filter
|
Handles storage of authentication between requests (in HTTP Session,for example)
|
Security enforcement filter
|
Ensures that a user has been authenticated and meets the property
authorization requirements to access a secured web resource
|
接受一个请求以后,它以下面的顺序进行。
上一篇: php无法使用curl怎么办