您的位置:首页 > 其它

单点登录系统原理和实现

2018-02-06 09:59 141 查看

一、单点登录介绍

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。也就是说,a.test.cn和b.test.cn两个站点之间只需要登录一次即可。

二、实现原理

当用户第一次访问应用系统的时候,因为还没有登录,会被引导到认证系统中进行登录;根据用户提供的登录信息,认证系统进行身份校验,如果通过校验,应该返回给用户一个认证的凭据--令牌;用户再访问别的应用的时候,就会将这个令牌带上,作为自己认证的凭据,应用系统接受到请求之后会把令牌送到认证服务器进行校验,校验令牌的合法性。如果通过校验,用户就可以在不用再次登录的情况下访问业务服务器B和业务服务器C了。如下图:

三、实现令牌(Java语言为例)

令牌构成:头 + 令牌长度(不包括校验和) + 登录时间 + 失效时间 + 用户信息 + 校验和
名称开始位置结束位置
03
令牌长度47
登录时间815
失效时间1624
用户信息24n
校验和n+1m
1、0~3,共4位,存储令牌的信息(包括版本号等等)预留便于以后扩展。2、4~7,共4位,java中int占用4个字节,用4位来表示令牌长度完全足够了。3、8~15,16~24,各占8位,java中long占8个字节,用long表示时间戳4、24~n,表示用户的身份信息,可以存储用户在数据库中的唯一识别码5、n+1~m,用来校验令牌是否被修改,计算校验和令牌内容的第一、二、三、四部分内容长度是固定的,第五部分内容可根据应用的实际需要进行扩充,除了存储用户信息之外,还可以存储其他与应用相关的信息,具有较强的可扩充性,避免了因固定长度带来令牌可扩充性的限制。创建令牌代码如下:

创建令牌

int和long转成byte

byte转成对应的int或long

数组合并方法

计算校验和校验令牌:

校验令牌1

校验令牌2

四、令牌加密和解密

为了保证令牌在传递过程中的安全,必须对原始令牌的内容进行加密,本文对令牌中的校验信息使用不可逆加密算法,防止校验令牌在传输过程中被截 取并篡改;用户信息使用对称加密算法,以便其他系统的解密。目前采用了AES、SHA-1、Base64等三种加/解密算法,通过这三种加/解密算法保证 数据的安全。AES加密算法用于加密用户信息及生成的令牌;SHA-1算法用于计算用户密码和令牌的校验和;Base64将AES加密后的令牌编/解码。以AES加解密举例:

AES加密

AES解密本例只是单点登录的一种方案,关于令牌结构和安全性方面,可以根据各自在项目中的需要进行定制化开发,例如:可以先对令牌进行AES对称加密,再使用RSA进行非对称加密提高令牌的安全性。等等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  单点 登录 系统