C/S架构程序多种类服务器之间实现单点登录(转)
(一)
在项目开发的过程中,经常会出现这样的情况:我们的产品包括很多,以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架构程序多种类服务器之间实现单点登录(转)的更多相关文章
- C/S架构程序多种类服务器之间实现单点登录
(一) 在项目开发的过程中,经常会出现这样的情况:我们的产品包括很多,以QQ举例,如登陆.好友下载.群下载.网络硬盘.QQ游戏.QQ音乐等,总不能要求用户每次输入用户名.密码吧,为解决这个问题,高手提 ...
- CentOS 7 服务器之间ssh无密码登录、传输文件
在Linux服务器之间使用ssh命令向另一个Linux服务器发送执行指令是需要输入密码 ssh登录提供两种认证方式:口令(密码)认证方式和密钥认证方式.其中口令(密码)认证方式是我们最常用的一 ...
- 批量实现多台服务器之间ssh无密码登录的相互信任关系
最近IDC上架了一批hadoop大数据业务服务器,由于集群环境需要在这些服务器之间实现ssh无密码登录的相互信任关系.具体的实现思路:在其中的任一台服务器上通过"ssh-keygen -t ...
- SSH远程登录:两台或多台服务器之间免密登录设置
有两台(或多台)同局域网的服务器A:192.168.2.21,B:192.168.2.25.让A,B这两台服务器之间能两两互相免密登录,并且每台服务器都可以自我免密登录(自我免密登录即:ssh loc ...
- Java架构师必知:什么是单点登录,主要会应用于哪些场景?
单点登录在大型网站里使用得非常频繁,例如,阿里旗下有淘宝.天猫.支付宝,阿里巴巴,阿里妈妈,阿里妹妹等网站,还有背后的成百上千的子系统,用户一次操作或交易可能涉及到几十个子系统的协作,如果每个子系统都 ...
- 【原】通过Spring-Session实现不同系统之间的单点登录
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.目前市面上有很 ...
- 基于EasyNVR摄像机无插件直播流媒体服务器实现类似于单点登录功能的免登录直播功能
提出问题 EasyNVR是一套摄像机无插件直播的流媒体服务器软件,他可以接入各种各样的摄像机,再经过转化统一输出无插件化直播的RTMP.HLS.HTTP-FLV流,同时,EasyNVR为了数据安全,提 ...
- 【原】linux两台服务器之间免密登录方法
搭建集群机器192.168.0.100和192.168.0.200里,需要两台机器中间相互拷贝文件: 方式一:下载192.168.0.100机器文件到本地,再将本地文件拷贝到B机器 方式二:192.1 ...
- Linux服务器之间免密登录设置
说明: A为linux服务器a B为linux服务器b 每台linux都有ssh的服务端和客户端,linux下的ssh命令就是一个客户端 我们常用ssh协议来进行登陆或者是文件的拷贝,都需要密码 A要 ...
随机推荐
- Gradle学习系列之九——自定义Task类型
在本系列的上篇文章中,我们学习了多Project构建,在本篇文章中,我们将学到如何自定义Task类型. 请通过以下方式下载本系列文章的Github示例代码: git clone https://git ...
- C#开发的高性能EXCEL导入、导出工具DataPie(支持MSSQL、ORACLE、ACCESS,附源码下载地址)[转]
转自:http://www.cnblogs.com/yfl8910/archive/2012/05/19/2509194.html 作为财务数据核算人员,面对大量的业务与财务数据,借助于传统的EXCE ...
- 有关C#标签Attribute的熟悉
Attribute 简单用法: 最近用到了,所以静下心来找些资料看了一下,终于把这东西搞清楚了. 一.什么是Attribute 先看下面的三段代码: 1.自定义Attribute类:VersionAt ...
- LeetCode126:Word Ladder
题目: Given two words (start and end), and a dictionary, find the length of shortest transformation se ...
- 205 Isomorphic Strings
Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...
- 设置php下载文件的超时时间
使用curl 可以使用curl自己实现一个curl_file_get_contents函数 //CURLOPT_FOLLOWLOCATION TRUE 时将会根据服务器返回 HTTP 头中的 &quo ...
- mysql启动报错:Starting MySQL...The server quit without updating PID file
在mysql的data目录下误删除了mysql-bin.000001,mysql-bin.000002等文件,但是没有删除mysql-bin.index文件,此时启动mysql就会报错: Starti ...
- winform(无边框窗体与timer)
一.无边框窗体 1.控制按钮如何制作就是放置可以点击的控件,不局限于使用按钮或是什么别的,只要放置的控件可以点击能触发点击事件就可以了 做的好看一点,就是鼠标移入(pictureBox1_MouseE ...
- 2013学习总结----JavaScript
javascript面向对象,实现的几种方式 1:直接使用JSON对象 var o1={ "a":1, "b":2, "c":functio ...
- jQuery eislideshow 图片轮播
在线实例 基础演示 自动播放 使用方法 <div id="ei-slider" class="ei-slider"> <ul class=&q ...