在项目开发的过程中,经常会出现这样的情况:我们的产品包括很多,如多个Web网站(前台、会员空间、管理平台等等)、C/S架构程序、客户关系系统等等,传统的身份验证方式已经大大的阻碍了我们各个产品之间的耦合性,应用传统的身份验证方式,我们必须要在每一个应用中进行登录操作,才可以应用这一产品。如果我们开发一个网站,那么在不同的应用之间如何共享登录信息呢?以前的解决方案一般会通过Session复制来完成,但是Session复制必须要应用在集群中,集群的搭建又会有这样那样的问题,所以经过很长时间的研究,包括关注微软.Net Passport的应用,发现了一个很好的跨平台、跨应用的身份验证解决方案,那就是——单点登录(Single Sign On),简称为 SSO。
一、 什么是单点登录(Single Sign On)
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统,SSO单点登录在应用层面上的“业务流程整合”,和用户界面上的“通用企业门户”的应用,在外部来解决登录问题。单点登录(SSO,Single Sign-on)是一种方便用户访问多个系统的技术,用户只需在登录时进行一次注册,就可以在多个系统间自由穿梭,不必重复输入用户名和密码来确定身份。
二、如何实现单点登录(Single Sign On)
笔者在深入观察了微软.Net Passport运行模式后,提出了如下的解决方案,在本解决方案中,可以很好的实现跨平台、跨应用进行身份验证,但是本解决方案有一个局限性就是要求使用的开发语言必须要支持WebService。1. 整体设计思路首先我们要明确单点登录的运行模式,即统一身份验证,在本解决方案中,我是通过Web Service实现用户身份验证,验证通过后将自动随机生成身份验证票据,并将身份验证票据发送给用户,待用户访问其他应用时,只对身份验证票据进行合法性验证即可。2. WebService实现的功能在本解决方案中,WebService提供的功能包括用户名/密码验证、身份验证票据的生成、身份验证票据的合法性验证这三个最基本的功能,其他功能可以根据用户的需求,自行扩展。由于WebService本身是跨平台的,只要各个应用在开发过程中使用的开发语言支持WebService即可调用身份验证平台进行相关的操作。3. 身份验证票据所谓身份验证票据就是用户身份验证通过后,发给用户用以标示身份验证通过的信息。身份验证票据中可以加密保存用户的身份信息或某一特定的验证信息等,一般使用对称加密,方便在身份验证票据合法性的检查中进行相应的解密。身份验证票据的保存也是很有挑战的一点,如果是C/S结构的程序,票据保存比较方便,只要其他应用能够取到就可以。在Web应用中,身份验证票据的保存就比较麻烦,我使用的方法是通过跨域操作Cookie,将票据保存在Cookie中即可,但是由于Cookie的不安全性,为防止恶意伪造Cookie进行诈骗,建议身份验证票据的生成过程中,加入特定的身份验证信息。
三、总结
本文仅提供了单点登录(Single Sign On),简称SSO的一种设计思路,在SSO的设计过程中,可以加入更多的相关功能(如:在我自己的应用中,我就加入了网站在线人数统计功能)。本解决方案经我亲自测试,可以解决使用不同开发语言进行统一的身份验证这一问题,在我自己的应用中,使用了Java平台和.Net平台,经统一身份验证后,可以实现单点登录,跨应用进行身份验证。在以后的应用中,可能会根据不同的需求进行相应的修改,在此只做抛砖引玉,希望各位多提意见,帮助我更好的提供一份更强大的单点登录解决方案。