(一)

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

(二)

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

C/S架构程序多种类服务器之间实现单点登录(转)的更多相关文章

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

    (一) 在项目开发的过程中,经常会出现这样的情况:我们的产品包括很多,以QQ举例,如登陆.好友下载.群下载.网络硬盘.QQ游戏.QQ音乐等,总不能要求用户每次输入用户名.密码吧,为解决这个问题,高手提 ...

  2. CentOS 7 服务器之间ssh无密码登录、传输文件

    在Linux服务器之间使用ssh命令向另一个Linux服务器发送执行指令是需要输入密码     ssh登录提供两种认证方式:口令(密码)认证方式和密钥认证方式.其中口令(密码)认证方式是我们最常用的一 ...

  3. 批量实现多台服务器之间ssh无密码登录的相互信任关系

    最近IDC上架了一批hadoop大数据业务服务器,由于集群环境需要在这些服务器之间实现ssh无密码登录的相互信任关系.具体的实现思路:在其中的任一台服务器上通过"ssh-keygen -t ...

  4. SSH远程登录:两台或多台服务器之间免密登录设置

    有两台(或多台)同局域网的服务器A:192.168.2.21,B:192.168.2.25.让A,B这两台服务器之间能两两互相免密登录,并且每台服务器都可以自我免密登录(自我免密登录即:ssh loc ...

  5. Java架构师必知:什么是单点登录,主要会应用于哪些场景?

    单点登录在大型网站里使用得非常频繁,例如,阿里旗下有淘宝.天猫.支付宝,阿里巴巴,阿里妈妈,阿里妹妹等网站,还有背后的成百上千的子系统,用户一次操作或交易可能涉及到几十个子系统的协作,如果每个子系统都 ...

  6. 【原】通过Spring-Session实现不同系统之间的单点登录

    单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.目前市面上有很 ...

  7. 基于EasyNVR摄像机无插件直播流媒体服务器实现类似于单点登录功能的免登录直播功能

    提出问题 EasyNVR是一套摄像机无插件直播的流媒体服务器软件,他可以接入各种各样的摄像机,再经过转化统一输出无插件化直播的RTMP.HLS.HTTP-FLV流,同时,EasyNVR为了数据安全,提 ...

  8. 【原】linux两台服务器之间免密登录方法

    搭建集群机器192.168.0.100和192.168.0.200里,需要两台机器中间相互拷贝文件: 方式一:下载192.168.0.100机器文件到本地,再将本地文件拷贝到B机器 方式二:192.1 ...

  9. Linux服务器之间免密登录设置

    说明: A为linux服务器a B为linux服务器b 每台linux都有ssh的服务端和客户端,linux下的ssh命令就是一个客户端 我们常用ssh协议来进行登陆或者是文件的拷贝,都需要密码 A要 ...

随机推荐

  1. 【转】sql server开启全文索引方法

    利用系统存储过程创建全文索引的具体步骤: 1) 启动数据库的全文处理功能 (sp_fulltext_database) 2) 建立全文目录 (sp_fulltext_catalog) 3) 在全文目录 ...

  2. BAT及各大互联网公司前端笔试面试题--Html,Css篇

    注意 转载须保留原文链接(http://www.cnblogs.com/wzhiq896/p/5931347.html )作者:wangwen896 整理分享出来希望更多的前端er共同进步吧,不仅适用 ...

  3. 12 19 spring3 项目总结

    项目截图: 林集团 https://home.cnblogs.com/u/linjituan/ 团队guihub: https:///github.com/MoiGi 李鹏飞 https://www. ...

  4. 0422 发现( 数学口袋精灵)bug

    团队博客地址: 甘佳萍:http://www.cnblogs.com/gjpg/ 李鹏飞:http://www.cnblogs.com/l549023320/ 赵创佳:http://www.cnblo ...

  5. 【EF 译文系列】韧性连接、重试(EF 版本至少为 6)

    原文链接:Connection Resiliency / Retry Logic (EF6 onwards) 一个应用程序的数据库连接,是非常容易受其它因素影响的,比如后端的异常或者不稳定的网络连接等 ...

  6. ASP.NET MVC使用动态产生meta

    在ASP.NET中,我们是很容易动态为header节点添加meta信息.<动态修改网页Header属性,Title,Meta标签等>http://www.cnblogs.com/insus ...

  7. android studio...混淆打包全揭秘

    前言,当前android studio使用的版本较新,低版本的如果有差异,或者问题,欢迎拍砖! 1.修改配置文件 找到配置文件,build.gradle,修改如下.    signingConfigs ...

  8. DataTable 获取列名 DataTable批量更新至数据库

    好久没写东西了,这几个月也没下功夫钻研技术,愧疚啊.说下最近刚学会的DataTable 的用法吧,新手适合看下. 1 DataTable 获取列名 在处理数据的时候大家都会用到模型,从datatabl ...

  9. R语言-简单线性回归图-方法

    目标:利用R语言统计描绘50组实验对比结果 第一步:导入.csv文件 X <- read.table("D:abc11.csv",header = TRUE, sep = & ...

  10. C#怎样处理xml文件的大于号和小于号等常用符号(xml符号引发的程序错误)

    在程序中由xml配置而成的sql语句要转换为C#支持的sql语句 <settings> <select> a.*</select> <from> (se ...