簡介
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
|
接受一個請求以后,它以下面的順序進行。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1356799