APP下载

单点登录系统的设计与实现

2013-09-17杜歆文

电视技术 2013年24期
关键词:用户名分站单点

杜歆文

(苏州广播电视总台 技术中心,江苏 苏州 215006)

单点登录系统的设计与实现

杜歆文

(苏州广播电视总台 技术中心,江苏 苏州 215006)

研究了单点登录系统的设计与实现,利用每人唯一的账号和密码实现多个系统的登录认证。讨论了两种单点登录实现方式,一种为主站通过非对称加密算法的私钥生成凭证,分站认证登录,另一种方式为主站模拟用户登录行为,采用POST参数的方式登录分站。两种实现方式各有利弊,适合不同情况。该系统对用户使用感受、系统安全性有较好影响。

单点登录;非对称加密;授权;参数传递;跨域

【本文献信息】杜歆文.单点登录系统的设计与实现[J].电视技术,2013,37(24).

1 需求分析

随着信息化的发展和全台网的建设,越来越多的工作依赖网络、计算机,工作人员需要记忆大量的用户名、密码,每天上班打开计算机登录域,写稿件,查询媒资,收发邮件……每一项工作都需要输入用户名、密码。由于系统开发使用时间不同,造成了用户名不统一,有的使用拼音缩写,有的使用中文名,还有的使用昵称登录;用户为了使用方便,有的使用简单密码登录,有的被强制设置为复杂密码,造成用户的困惑。因此需要简化登录过程,统一用户名和密码。

目前苏州台采用Windows域管理用户和计算机,用户必须拥有一个域账号才能登录计算机,接入网络。因此,考虑把该账号作为用户统一且唯一的身份认证信息。

由于Web系统的便利性,以及越来越完善的功能,近年来,绝大多数应用系统都采用了B/S架构,因此,本文主要考虑Web系统的用户管理、登录问题。

将现有系统分成两大类:一类系统是由台内自行开发研制,比如固定资产管理、技术客服系统等;还有一类是由第三方厂商进行开发部署,比如媒资、文稿、邮箱等。对于前者,可以对登录模块进行修改,以适应单点登录模块的需求,同时,在以后开发的系统中,可以省略登录模块,依靠单点登录系统对用户进行管理。对于后一类系统,无法进行定制开发,也没办法做任何修改,只能去适应现有系统,依赖各系统原有的登录模块来实现单点登录。考虑到用户习惯的延续和系统切割的平滑,计划保留原有各系统登录模块,用户可以完全保持原有习惯,再逐步向单点登录引导。

2 设计与实现

2.1 系统设计

为了方便描述,先约定几个概念:1)总站,也可称为主站、中心站点,单点登录系统中验证用户登录,并向分站跳转;2)分站,也可称子系统,原有的业务系统需要接入单点登录;3)凭证,英文token,子系统以此识别授权用户。

原登录过程为用户打开所需登录系统首页,输入用户名、密码,登录系统。现在考虑以下登录过程:用户访问未授权页面时被转向到总站登录页,或者用户直接打开该登录页,输入用户名、密码,自动判断或手动选择需要登录的子系统,主站验证通过后发送凭证给分站,并转向分站验证通过后允许用户登录。

该登录过程对于自行开发的网站只需要稍作修改即可实现,整个过程符合用户使用习惯,并能够保证安全可靠。但需要考虑两个问题:

1)对于以后开发的站点,是延续以前的方式拥有独立的登录模块,还是可以省略,完全依赖单点登录。笔者认为分站是可以完全信任主站的,对于主站传到分站的凭证,如果可以完全证实用户身份的话,分站将允许用户登录。在这种情况下,分站可以省略用户登录验证过程,完全依赖单点登录系统。但是由于各系统的功能不同,子系统还需要自己的权限管理。

2)面对不可修改的分站,要想实现这种登录过程就一筹莫展了。为了使用户体验统一,同样输入用户名、密码,选择登录子系统后,总站模拟用户行为,去分站提交对应的用户名、密码,完成登录后,总站转向分站登录后页面。对于用户来说,需要做的只是输入必需信息,体验完全一样。

2.2 数据结构

该系统数据结构简单,主要需要保存两类数据,一种是用户信息,记录总站用户名和分站用户名的对应关系;还有一种是站点信息,记录分站的地址、登录页、登录方式等信息。

2.3 系统实现

2.3.1 主站登录页

主站登录页用于接收用户的输入,包括用户名、密码、选择登录分站,当用户允许保存cookie时,在用户本地保存加密后的用户名。用户访问主站登录页,页面检测到cookie,并提交给服务器,服务器对cookie信息进行检查、解密,确认用户信息完整后提供快速登录功能,用户只需要选择登录分站名称,而不需要重复输入用户名、密码,可以直接访问分站。

2.3.2 可修改的站点登录

总站将凭证传给分站,分站验证凭证后允许登录,在这个过程中关键问题在于建立凭证,能够保证凭证的安全性,使分站能够完全信任。

此处需要用到非对称加密算法。通常接触较多的是对称加密算法:发送方将需要发送的明文信息使用密钥,通过一系列运算产生密文发送,接收方收到密文后使用同样的密钥通过运算还原出明文,所谓对称,就是指采用这种方式,使加、解密双方的密钥是相同的。

对于非对称算法,显而易见,即加密、解密过程中的密钥不同。非对称加密算法又称公开密钥加密算法,该算法需要两个密钥——公开密钥和私有密钥,这两个密钥是一对。如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。甲方生成一对密钥并将其中的一把作为公用密钥向其他方公开,得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方,甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。除了传输数据,非对称密钥还用来进行数字签名:发送方A对发送的报文M生成一个摘要X1并用自己的私钥加密这个摘要X1,接收方B对使用A的公钥解开这个加密摘要,得到X1并对比接收到的报文M重新生成的摘要X2,如果一样,说明报文M在传递过程没有被修改,的确是A发送的[1]。

在本系统中采用了常用的非对称加密算法——RSA,并对非对称加密算法两种常规的使用方法稍作修改,使其更符合本系统的应用。

对于每个分站,需要建立一对密钥——一个公钥和一个私钥。私钥由主站妥善保管,公钥对分站公开。主站登录页验证用户登录后,根据用户选择分站查找该分站对应用户名,如果不存在,则转向一个页面,要求用户输入需要登录分站的用户名、密码,将这一过程称之为授权。授权页去分站数据库验证用户名和密码,验证通过后将主站用户名和分站用户名建立对应关系并保存,授权过程只有第一次登录分站时需要进行,目的是建立两个站点用户名之间的对应关系,密码不需要保存。授权成功后主站对分站用户名用对应私钥进行加密,并将加密后的结果传递给分站,分站用自己的公钥解密,正确解密将得到需要登录的分站用户名。

通常情况,如果篡改加密后密文是无法正常解密的,但不排除特殊情况,因此加入校验机制(此处使用最简单的长度校验),将用户名和校验码一起使用私钥加密,分站使用公钥解密后检查用户名和校验码,符合则认为解密成功。在传输过程中,还需要防止恶意攻击,如果主站、分站以外的第三者截取到加密信息,不需要输入密码就可以登录系统。因此,在用户名、校验码之外,再加上时间戳,这三个信息一起加密传输,分站得到信息解密,先检查校验码,判断是否正确解密,确认密钥的正确性,再检查时间戳,超过有效时间则认为该信息无效,不允许登录。这样即使加密信息被截取重放,由于超过了有效时间,也无法正常登录系统。

2.3.3 不可修改的站点登录

该类站点登录,需要主站模拟用户登录行为,达到单点登录的目的。

如前所述,这里同样需要“授权”这一过程建立主站用户名和分站用户名的关联。不同的是对于一些数据库加密保存密码的系统,主站还需要保存用户的明文密码。

表单(form)有两种方法GET和POST把数据提交给服务器。GET请求的数据会附在URL之后,以“?”分割URL和传输数据,参数之间以“&”相连,如login.aspx?name=xxx&password=yyy。POST则是把提交的数据放置在HTTP包的包体中。绝大多数登录页面都是通过POST方式把相关参数提交到后台进行验证。因此,需要程序模拟这个POST的过程登录。

在JavaScript中,有一个很重要的安全性限制,被称为同源策略(Same-Origin Policy),即JavaScript只能访问与它的文档在同一域下的内容。比如www.a.com站点下的页面元素或脚本和www.b.com站点是无法互相访问的。显然,总站和分站并不能保证都在同一个域名下,因此,这里产生了一个跨域POST的问题,解决方法有一些,本系统中使用的是一种比较简单的方法:在分站的网站主目录下放置一个静态页面,取名为SSOLogin.htm,中心站点将用户名、密码、登录页地址通过GET方式传递给这个 页 面 ,如 SSOLogin.htm?username=aaa&password=bbb&posturl=ccc,该页面得到参数信息后,按约定格式将用户名、密码等必需信息POST到登录页,登录成功后转向登录后页面。由于SSOLogin.htm是纯静态页面,不需要服务器交互,可以做到与分站服务器环境无关、与分站后台编写语言无关,只要把一个通用的SSOLogin.htm页面放到主目录下即可。在这个登录过程中需要注意几个问题:1)为了避免GET方式传递用户名、密码过于暴露,可以采用隐藏iframe的方式,在跳转页动态产生一个不可见的iframe,iframe的src指向分站的SSOLogin.htm,登录成功后 SSOlogin.htm 通过 parent.location.href修改父页面的路径以跳转到登录后页面,当然不采用这种方式也可以,因为用户需要登录中心站点以后才会向分站传递用户名和密码,可以保证只有登录者本人可以看到GET参数内容;2)某些分站的用户名可能是中文,这样会产生中文编码问题,需要根据分站登录页的GBK和UTF-8等编码方式对中文进行编码,然后POST,否则不能成功登录[2]。

某些第三方的网站登录会要求输入验证码,由于该系统在台内应用没有遇到这种情况所以没有过多处理,可以考虑将验证码图片从分站抓取到主站登录页手动输入。

3 使用方法

1)用户打开主站登录页输入用户名密码,选择需要登录的分站进行登录。授权管理在这里被当作一个分站,用户登录后可以进行授权管理,如图1所示。

图1 单点登录授权管理(截图)

2)当检测到本地cookie存在并有效时,可以不输入用户名密码快速登录,也可以选择其他用户登录,如图2所示。

3)当用户第一次登录某个分站时,要求验证分站对应用户名密码,记录对应关系,以后登录不需要这个过程,直接进入分站,如图3所示。

图2 检测到已经登录的账户(截图)

图3 验证分站对应用户名密码(截图)

4)可以对分站登录页进行改造,在分站登录页检测到有单点登录cookie存在,即用户使用过单点登录系统时,提醒用户使用快速登录,如图4所示。

图4 提醒用户使用快速登录(截图)

4 使用效果

系统上线后,大大方便了用户对于各信息系统的使用,用户不再需要记忆很多用户名和密码,在一个页面完成多个系统的登录;同时,可以设置一个比较复杂的密码,较原来提高了安全性。但同时也存在一些弊端,原来有用户习惯借出自己的域账号或借用别人的域账号,在单点登录的情况下,信息泄露的风险就比较大。可以引导用户妥善保管自己账号或者另建一套用户名密码独立于域账号。总而言之,单点登录对于系统管理、用户使用利大于弊。

5 创新点

1)HTTP Referer是header的一部分,当浏览器向Web服务器发送请求时,一般会带上Referer,告诉服务器这是从哪个页面链接过来的。分站登录页上一般会放置单点登录链接,用户可以使用原有方式登录,也可以点击链接跳转到主站登录页,主站登录页根据HTTP Referer判断来源分站,主动替用户选择登录分站,减少用户操作,提升体验[3]。

2)分站登录页检测到有单点登录cookie存在,提醒用户使用快速登录,经同意后跳转到主站登录页,引导用户尽量使用单点登录。单点登录cookie由主站创建,和分站很可能不在同一个域,跨域是不允许cookie读写的,因此采用变通手法:有分站b1.bbb.com的网页,内嵌主站 a.aaa.com 的 iframe(命名为 iframeA),iframeA 再内嵌b2.bbb.com的iframe(命名为iframeB),iframeA取得主站*.aaa.com 的 域 的 cookie 值 ,通 过 URL 传 递 给 iframeB b2.bbb.com,iframeB b2.bbb.com 和 b1.bbb.com 属于同一个域,可以通过javascript传值,告诉分站登录页主站的cookie值,以此来实现*.aaa.com和*.bbb.com这样跨域的cookie传递[4]。

3)通常单点登录系统要求各分站用户名统一,方便识别用户;或者管理员后台统一建立对应关系。本系统创新使用“授权”的方式,将用户名映射这项工作交给用户自己,既保证了安全,也更加灵活,用户可以在某分站拥有多个用户名,由自己选择授权。

[1] 洪帆,崔国华,付小青.信息安全概论[M].武汉:华中科技大学出版社,2005.

[2]ZAKAS N C.JavaScript高级程序设计[M].李松峰,曹力,译.北京:人民邮电出版社,2010.

[3]WALTHER S,HOFFMAN K,DUDEK N.ASP.NET4揭秘:卷1[M].谭振林,黎志,朱兴林,等,译.北京:人民邮电出版社,2010.

[4] 单东林,张晓菲,魏然.锋利的jQuery[M].北京:人民邮电出版社,2009.

TN948

B

责任编辑:任健男

2013-08-20

猜你喜欢

用户名分站单点
《护士进修杂志》投稿程序
佩雷兹获赛季个人首个分站冠军——2022 F1摩纳哥大奖赛
《护士进修杂志》投稿程序
基于CAN 总线多主通信技术的监控分站设计
历元间载波相位差分的GPS/BDS精密单点测速算法
《护士进修杂志》投稿程序
超薄异型坯连铸机非平衡单点浇铸实践与分析
机智的快递员
数字电视地面传输用单频网与单点发射的效果比较
16吨单点悬挂平衡轴的优化设计