SSO详细介绍
2010-09-19 11:17
3 WEB-SSO的实现
随着互联网的高速发展,
WEB
应用几乎统治了绝大部分的软件应用系统,因此
WEB-SSO
是
SSO
应用当中最为流行。
WEB-SSO
有其自身的特点和优势,实现起来比较简单易用。很多商业软件和开源软件都有对
WEB-SSO
的实现。其中值得一提的是
OpenSSO
(
https://opensso.dev.java.net
),为用
Java
实现
WEB-SSO
提供架构指南和服务指南,为用户自己来实现
WEB-SSO
提供了理论的依据和实现的方法。
为什么说
WEB-SSO
比较容易实现呢?这是有
WEB
应用自身的特点决定的。
众所周知,
Web
协议(也就是
HTTP
)是一个无状态的协议。一个
Web
应用由很多个
Web
页面组成,每个页面都有唯一的
URL
来定义。用户在浏览器的地址栏输入页面的
URL
,浏览器就会向
Web Server
去发送请求。如下图,浏览器向
Web
服务器发送了两个请求,申请了两个页面。这两个页面的请求是分别使用了两个单独的
HTTP
连接。所谓无状态的协议也就是表现在这里,浏览器和
Web
服务器会在第一个请求完成以后关闭连接通道,在第二个请求的时候重新建立连接。
Web
服务器并不区分哪个请求来自哪个客户端,对所有的请求都一视同仁,都是单独的连接。这样的方式大大区别于传统的(
Client/Server
)
C/S
结构
,
在那样的应用中,客户端和服务器端会建立一个长时间的专用的连接通道。正是因为有了无状态的特性,每个连接资源能够很快被其他客户端所重用,一台
Web
服务器才能够同时服务于成千上万的客户端。
但是我们通常的应用是有状态的。先不用提不同应用之间的
SSO
,在同一个应用中也需要保存用户的登录身份信息。例如用户在访问页面
1
的时候进行了登录,但是刚才也提到,客户端的每个请求都是单独的连接,当客户再次访问页面
2
的时候,如何才能告诉
Web
服务器,客户刚才已经登录过了呢?浏览器和服务器之间有约定:通过使用
cookie
技术来维护应用的状态。
Cookie
是可以被
Web
服务器设置的字符串,并且可以保存在浏览器中。如下图所示,当浏览器访问了页面
1
时,
web
服务器设置了一个
cookie
,并将这个
cookie
和页面
1
一起返回给浏览器,浏览器接到
cookie
之后,就会保存起来,在它访问页面
2
的时候会把这个
cookie
也带上,
Web
服务器接到请求时也能读出
cookie
的值,根据
cookie
值的内容就可以判断和恢复一些用户的信息状态。
Web-SSO
完全可以利用
Cookie
结束来完成用户登录信息的保存,将浏览器中的
Cookie
和上文中的
Ticket
结合起来,完成
SSO
的功能。
为了完成一个简单的
SSO
的功能,需要两个部分的合作:
3.1 Web SSO 的样例
根据上面的原理,我用
J2EE
的技术(
JSP
和
Servlet
)完成了一个具有
Web-SSO
的简单样例。样例包含一个身份认证的服务器和两个简单的
Web
应用,使得这两个
Web
应用通过统一的身份认证服务来完成
Web-SSO
的功能。此样例所有的源代码和二进制代码都可以从网站地址
http://gceclub.sun.com.cn/wangyu/
下载。
样例下载、安装部署和运行指南:
|