推薦:J2EE中使用者授權和SSO(單點登入)

banq發表於2003-02-25
今天才看到這篇文章,非常好,從各個方面闡述了J2EE中使用者驗證系統的原理和應用技術,其中關於JAAS和Petstore的論述很精彩,文章考證了Petstore的三個版本中不同使用者系統的實現:

1.Java Pet Store 1.0.1
使用form-based authentication ,表單式認證,這是我們常用的,但使用者到達一個不被授權訪問的資源時,web容器就推出一個html頁面,要求輸入使用者名稱和密碼,缺點:not portable across containers.

2.Java Pet Store 1.1.2
一個基於servlet的sign in/sign out來集中處理所有的request,缺點是必須由應用程式自己來處理。

3.Java Pet Store 1.3
使用filter概念來防止使用者訪問一些被授權的資源,filter會擷取所有的request/response,然後放置一個驗證透過的標識在使用者的session中,然後filter每次依靠這個標識來決定是否放行response.
但是也是沒有使用Jaas。

文章認為,我們必須使用Jaas,這樣才能開發出一個可重用 可移植的健壯的使用者許可權系統。

文章開始分析幾個很好的使用者許可權系統:
M$的.net的Passport
Netegrity SiteMinder
IBM WebSphere Portal Server
IBM是使用寫加密的key到使用者瀏覽器cookiet中的辦法實現跨域名驗證。

文章最後提出SSO模式:
這個模式分為:
gatekeeper :採取filter 或統一servlet的方式
authenticator: 在WEB中使用JAAS自己來實現。
使用者資格儲存: LDAP或資料庫

1.gatekeeper攔截檢查每個到達受保護的資源。首先檢查這個使用者是否有已經建立好的login session,如果沒有,gatekeeper 檢查是否有一個全域性的和authenticator相關的SSO session?

2.如果沒有全域性的SSO session, 這個使用者被導向到authenticator的 sign-on 頁面,要求提供使用者名稱和密碼。

3.authenticator接受使用者名稱和密碼,透過使用者的資格系統驗證使用者。

4.如果驗證成功, authenticator將建立一個全域性的login session,並且導向gatekeeper來為這個使用者在他的web應用中建立一個login session

5.authenticator和gatekeepers聯合分享cookie,或者使用tokens在query字元裡



文章地址:

http://www.javaworld.com/javaworld/jw-05-2002/jw-0524-signon.html

相關文章