推荐:J2EE中用户授权和SSO(单点登录)
今天才看到这篇文章,非常好,从各个方面阐述了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