C/S架构程序多种类服务器之间实现单点登陆

(一)    html

     在项目开发的过程当中,常常会出现这样的状况:咱们的产品包括不少,以QQ举例,如登录、好友下载、群下载、网络硬盘、QQ游戏、QQ音乐等,总不能要求用户每次输入用户名、密码吧,为解决这个问题,高手提出了一个很好的跨平台、跨应用的身份验证解决方案,那就是——单点登陆(Single Sign On),简称为 SSO。
1、 什么是单点登陆(Single Sign On)
单点登陆(SSO,Single Sign-on)是一种方便用户访问多个系统的技术,用户只需在登陆时进行一次注册,就能够在多个系统间自由穿梭,没必要重复输入用户名和密码来肯定身份。
2、如何实现单点登陆(SSO)
一、总体设计思路
首先咱们要明确单点登陆的运行模式,即统一身份验证,在解决方案中,通常经过认证服务器(LoginServer)实现用户身份验证,验证经过后将自动随机生成身份验证票据,并将身份验证票据发送给用户,待用户访问其余应用时,只对身份验证票据进行合法性验证便可。
二、认证服务器(LoginServer)实现的功能
在解决方案中,LoginServer提供的功能包括用户名/密码验证、身份验证票据的生成、身份验证票据的合法性验证这三个最基本的功能,其余功能能够根据用户的需求,自行扩展。
因为LoginServer基于网络通信,使用TCP或UDP协议,因此其自己是跨平台的,只要各个应用在开发过程当中使用的开发语言支持身份验证票据验证,便可调用身份验证平台进行相关的操做。
三、身份验证票据
所谓身份验证票据就是用户身份验证经过后,发给用户用以标示身份验证经过的信息。身份验证票据中能够加密保存用户的身份信息或某一特定的验证信息等,通常使用对称加密,方便在身份验证票据合法性的检查中进行相应的解密。C/S结构的程序,票据保存比较方便,只要其余应用可以取到就能够。
四、验证票据
用户拿到身份验证票据后,当登陆B系统时,把这个票据传给B系统,B系统拿这个票据系统到LoginServer进行认证便可。算法

 

(二)数据库

     在上面文档中,初步介绍了S架构程序多种类服务器之间实现单点登陆的流程,但是当用户量巨大或某项产品的重复登陆频繁时,这种单点登陆(SSO)实现就出现了瓶颈,以下:
多台LoginServer服务器之间共享数据比较困难,只能经过共享内存或数据库共享,很难跨机房部署。
随着业务量的增长,LoginServer服务的需求量也直线上升,并且出现问题的几率很高,常常形成正经常使用户的认证失败。
为解决上述问题,建议票据的认证有子系统的服务器完成,从而下降出现问题的几率,减小服务器压力。具体的方法以下:
一、加密身份验证票据
LoginServer服务器使用对称加密算法加密身份验证票据,如RC六、AES和Blowfish等,票据内容包括用户名、认证时间、IP地址、自定义数据等信息。客户端登陆后,LoginServer把加密后的密串通知给客户端。
二、验证身份票据
其余系统和LoginServer服务器共享对称加密算法和密钥,拿到客户端的密串后使用相同算法和密钥解密,而后对比用户名、认证时间、IP地址、自定义数据等,如相同则容许登陆。
三、安全问题
咱们知道对称加密算法的破解是有可能的,在算法已知的状况下,密钥、明文、密文,三者获得二者能够计算出另一个;在上述方法中,明文增长了自定义数据,用户名、认证时间每一个用户都不一样,因此黑客通常没法取得正常明文;咱们只向客户端通知密文,因此客户端应不能经过密文穷举获得明文+密钥,因此没法破解。
四、源代码泄露
若是服务器源代码泄露,则可能泄露加密算法、密钥、明文等;此时的补救方法是及时更新密钥、调整自定义数据,全部产品都须要同时更新,明文和密钥都发生变化,泄露代码的风险就能够忽略了。
若是服务器架构足够智能,则能够定时更新密钥和自定义数据,如每月更新一次,则整个实现体系就很是安全了;更新密钥时切记作好兼容工做,确保更新前用户取得的身份票据有必定的时间能够验证成功。
五、使用范围
上面这个方法用于本身公司的服务器之间没有问题,但若是是要登陆其余合做伙伴的产品,则须要单独协商加密密钥和自定义数据便可。安全

 

 

出处:https://www.cnblogs.com/starksoft/p/4809362.html服务器