统一身份认证即单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统,一次登录,资源尽享。
SSO的产品也是满天飞扬。所有著名的软件厂商都提供了相应的解决方案。例如:Microsoft Sharepoint Server,BEA的Web SSO(SAML)等。SSO是个大课题,但其原理其实很简单。分析比较主流的解决方案(结合本公司其他方案与华中科技大学开发全省政务系统解决方案), 如下图所显示:
(图一)
要实现SSO,需要以下主要的功能:
- 所有应用系统共享一个身份认证系统。
统一的认证系统是SSO的前提之一。认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志(ticket),返还给用户。另外,认证系统还应该对ticket进行效验,判断其有效性。 - 所有应用系统能够识别和提取ticket信息
要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对ticket进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。
其中尤其需要注意的是,确保ticket的信息安全。如同大家在公园买了套票,结果在公园内部套票被别人盗走。因为此时的ticket就是代表着用户名和密码。
首先我们需要开发一个独立于任何应用系统的认证系统,该系统如其他web系统一样,能够增加、修改、删除用户。同时提供webservice服务。并且认证系统必须基于内网,其他各应用系统可以是内外网,如果应用系统是外网IP,那么至少得配置2块网卡,另外一块走内网,确保能与认证系统连通。
- 如上图(一),当我们要进入应用系统1,系统1会检查你是否有帐户和密码或者认证标志(ticket),如果都没有,返会到登录页面;
- 在登录页面录入帐户和密码,提交调用内网的认证系统(webservice接口),通过后返回认证标志(ticket),进入系统1。
- 如果要由应用系统1进入应用系统2,只需要用post提交方式,在路径中附带认证标志(ticket),应用系统2先去认证系统(webservice接口)核对身份,通过后根本用户id在本系统获取权限,跳转到被访问页面。这样实现了不同应用系统的跳转。
对于认证标志(ticket)的格式有多种多样,各大商业银行或严重涉密单位认证标志是通过USBKEY存储,每个使用该系统的用户都有一个USBKey证书,在登陆系统的时候把这个证书插在计算机上。每一个网站都要通过这个证书去认证。那么这个证书是静态和唯一的。
对于园林局我们建议用动态认证标志(ticket),用户每次统一登录,认证系统自动创建唯一的认证标志(ticket),每次登录都不相同,同时各应用系统必须确保认证标志(ticket)的安全,用post方式进行传递认证。为了进一步的安全考核,认证系统在生成认证标志(ticket)时附带时间戳,在认证的时候可以配置时间超过了多少即使是合法的认证标志(ticket),也不能进入系统。
认证标志(ticket)中可以是唯一的流水号或用户名和密码等,因为认证标志(ticket)必须保存于给应用系统的session中,以post提交,是很安全的。认证系统只核对发出去的认证标志(ticket)与收回来的认证标志(ticket)是否一样;同时检查时间戳的有效期。
华中科技大学开发全省政务系统采用斯坦福大学开源sso(java语言),原理皆同。
通过我公司开发其他的系统运行情况来看,本方案同样能适应园林局的业务需求。
转载请注明:苏demo的别样人生 » 统一身份认证的实现