APP下载

基于Cookie的同域单点登录的实现

2017-06-10戚利娜

科技创新与应用 2017年16期

摘 要:不同的信息系统为保证安全性,须用户重复输入用户名和密码进行验证。上述操作过程繁琐,浪费时间,严重影响用户体验。而单点登录技术通过“一次登录,多方认证”的方案可解决多系统重复验证的问题。文章介绍了单点登录的定义、分类标准,通过利用Cookie的特性设计了基于Cookie的同域单点登录的实现方案和实现流程,并以同域单点登录为具体案例编写代码实现了该功能,最后就基于Cookie同域单点登录的实现方案中存在的安全隐患进行了讨论,并针对性地提出了具体的改进措施。文章从方案的设计以及方案的实现都做了相应的论证,因此具有一定的参考价值。

关键词:Cookie;单点登录;同域登录

1 概述

隨着信息时代的来临,多重样式的信息系统解决了用户的信息资源问题,提高了个人和企业的效率。信息系统确保用户信息资源的隐私,依赖登录认证流程。即,只有用户名和密码等通过信息系统的认证流程,用户才能合法访问系统管理的信息资源。但是,不同的信息系统具有独立的登录认证系统。因此,面对不同的信息系统,用户必须多次输入验证信息,重复执行验证过程。上述过程操作繁琐,影响用户体验。如何在保证用户信息安全的情况下,降低验证次数,达到一次登录,多系统免登录合法使用是面临的问题。单点登录技术解决了上述问题。

所谓单点登录,简称为SSO,即Single Sign On,具体含义是指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统,通过单点登录,用户能实现“一次登录,多方认证”。单点登录具有多种分类标准:(1)按相互信任系统的访问地址区分为同域单点登录、同父域单点登录以及跨域单点登录;(2)按实现单点登录的技术分为基于LTPA、基于表单以及基于Cookie。

因为基于LTPA单点登录只能适用于IBM系列产品,具有一定的局限性,而基于Cookie的单点登录具有集成度较好、实现简单、容易扩展,支持分布式部署、支持跨平台等优点。因此本文就讨论基于Cookie的同域单点登录的设计与实现。

2 Cookie概述

Cookie是客户端浏览器访问服务器数据时,服务器保存在客户端的一段文本信息,主要是用于对客户端信息进行标记,从而区分不同的客户端浏览器。

Cookie采取健、值的形式保存。主要的属性有Cookie名称、Cookie有效期、域名、路径等。Cookie的有效期指明Cookie存在的期限;而域名则明确了获取Cookie的Internet域;路径定义获取Cookie的路径范围。本文特别要提到的是域名属性以及路径属性,因为这两个属性是单点登录的关键。举个例子,假设有两个信息系统的服务器地址分别是http://domain1.com.cn、http://domain2.com.cn。根据单点登录的定义可知,上述两个主页能实现“一次登录,多次认证”的关键是,上述两个地址都能获取共享的Cookie信息。而Cookie的域名属性和路径属性就决定了访问Cookie的地址范围。因此,改变Cookie域名属性和路径属性,则可能导致服务器无法获取Cookie,从而影响认证过程。总之,域名属性和路径属性对单点登录而言,非常重要。

Cookie的域名属性用Domain表示,Cookie的路径属性用Path表示。具体而言,假设新建Cookie的名字为NewCookie,则NewCookie.Domain=“.com.cn”,NewCookie.Path=“/”,表示com.cn域下所有的路径都可以访问NewCookie。

3 单点登录的流程

单点登录的流程如下:当用户登录系统时,服务器认证中心将遍历用户客户端所有的Cookie,判断是否存在与认证中心一致的Cookie。如果存在,则跳过登录过程,直接跳转到系统主页;否则跳转到登录页面。用户在登录页面输入用户名、密码等信息后,服务器验证登录信息是否符合要求,如果符合,则创建Cookie,标记登录信息,跳转主页。否则提示登录信息错误,重新登录。具体如图1所示。

4 实现方案

单点登录系统由三部分构成:

(1)Web浏览器客户端。用户通过Web浏览器发送访问服务器资源的请求,存储Cookie,用户通过Web浏览器通过表单提交用户名、密码等登录信息到应用服务器验证,接收应用服务器的反馈。

(2)应用服务器。存储用户访问的数据资源、用户名、密码,验证用户提出的登录信息是否合法,并跳转页面发送至浏览器。

(3)认证中心服务器。存储Cookie信息,获取Cookie,验证Cookie的有效性。

本文在SSH框架基础上实现同域单点登录,具体代码如下:

后台验证用户名和密码的类:

public class SSOAction extends ActionSupport{

public String doLogin(){

boolean ok = SSOCheck.checkLogin(username,password)

if( ok ){

Cookie cookie = new Cookie(“ssocookie”,“sso”);

cookie.setPath(“/”);

HttpServletResponse response = ServeltActionContext.getResponse();

response.addCookie(cookie);

return SUCCESS;

}

}

}

public class SSOCheck{

public static final String USERNAME=“user”;

public static final String PASSWORD=“123”;

//检查用户名和密码的正确性

public static boolean checkLogin(String username,String password){

if( username.equals(USERNAME) && passsword.equals(PASSWORD) ){

return true;

}

return false;

}

//驗证Cookie的有效性

public static bookean checkCookie(HttpServeltRequest request){

Cookie[] cookie = request.getCookies();

if( cookie != null ){

for(Cookie cookie:cookies){

if( cookie.getName.equals(“ssocookie”)

&& cookie.getValue().equals(“sso”)){

return true;

}

}

}

return false;

}

}

5 Cookie安全性分析

根据前几节的分析,单点登录的关键是Cookie的验证。但是客户端保存的Cookie是一段文本。客户端对其内容以及访问权限并未加以限制,因此Cookie存在一定的安全隐患。例如,当用户成功登录应用服务器后,其他用户来使用该客户端。因为先前用户登录后,保存有合法的Cookie,则后来用户无需登录也可以成功访问其他被信任的系统。此外,保存在客户端的Cookie,保存的路径不具有隐蔽性和访问限制,并且Cookie内容是以明文的保存,这些特点导致Cookie信息非常容易被非法用户窃取,从而利用窃取的Cookie通过认证,非法进入系统主页。

解决上述安全隐患的办法如下:(1)多用户访问客户端;(2)对Cookie信息进行加密保护。

参考文献

[1]刘润达,诸云强,宋佳,等.一种简单跨域单点登录系统的实现[J].计算机应用,2007,2(27):288-291.

[2]沈海波,洪帆.基于Cookie的跨域单点登录认证机制分析[J].计算机应用与软件,2006,12(23):48-51.

[3]赵晋,杨旭董.基于CAS的单点登录系统的研究与实现[J].软件,2016,37(11):118-124.

[4]SM2算法对基于cookie的跨域单点登录的优化方案[J].集宁师范学院学报,2016,38(5):41-43.

[5]王国伟,薛曼君.基于票据的跨域单点登录[J].计算机应用,

2012,32(6):1766-1768.

[6]董亮卫,汪文勇,黄鹂声.支持单点登录的统一资源管理体系研究[J].计算机应用,2006,26(5):1146-1147.

作者简介:戚利娜(1981-),女,湖南邵阳人,学历:本科,吉首大学张家界学院理工农学部讲师,研究方向:计算机应用技术。