一.单点登录介绍
单点登录(Single Sign On )简称SSO,是目前流行的企业业务集成解决方案之一。 SSO的定义是,在多个APP应用程序系统中,用户可以通过一次登录访问所有相互信任的APP应用程序系统。 这意味着在a.test.cn和b.test.cn这两个站点之间只需登录一次。
二.实现原理
用户第一次访问APP应用系统时,因为还没有登录,所以会被身份验证系统引导登录。 基于用户提供的登录信息,认证系统进行认证,如果认证通过,则需要向用户返回作为认证的认证信息的令牌,用户访问其他APP应用时,携带该令牌,作为用于自己认证的认证信息,APP应用验证通过后,用户无需再次登录就可以访问业务服务器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,检查令牌是否修改,计算校验和
令牌内容的第一、二、三、四部分内容长度固定,第五部分内容可以根据APP应用的实际需要进行扩展,除用户信息外,还可以存储其他APP应用的相关信息,扩展性强,通过固定长度实现令牌的可扩展性
按如下方式编写令牌码:
创建令牌
输入和长整型将转换为字节
byte将转换为相应的输入或长整型
数组的合并方法
计算校验和
验证令牌:
验证令牌1
检查令牌2
四.加密和解密令牌
为了保证令牌在传输过程中的安全,必须对原始令牌的内容进行加密。 本文对令牌中的检测信息使用有损加密算法,防止检测令牌在传输过程中被截获和篡改。 用户信息允许使用对称加密算法解密其他系统。 目前采用了AES、SHA-1、Base64等三种加法/解密算法,这三种加法/解密算法保证了数据的安全性。
AES加密算法用于加密用户信息和生成的令牌。 SHA-1算法用于计算用户密码和令牌的校验和。 Base64编辑/解密加密了AES的令牌。
AES加密示例:
AES加密
AES解码
本例只是单点登录的一种方案,关于令牌的结构和安全性,可以根据各个项目的需要进行定制开发。 例如,可以先用AES对称加密令牌,然后使用RSA不对称加密以提高令牌的安全性。 等等。