java单点登录原理_单点登录系统原理和实现

一、单点登录介绍

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

二、实现原理

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

229520bedcbf5a8a5441a6af0c85205c.png

三、实现令牌(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,用来校验令牌是否被修改,计算校验和

令牌内容的第一、二、三、四部分内容长度是固定的,第五部分内容可根据应用的实际需要进行扩充,除了存储用户信息之外,还可以存储其他与应用相关的信息,具有较强的可扩充性,避免了因固定长度带来令牌可扩充性的限制。

创建令牌代码如下:

a5efdfc030cf3dd048ba0ae593c8e4b1.png

创建令牌

eede32fc07d96cd38a2eab72e215085f.png

int和long转成byte

d29e2df978be213052d572d172b2a068.png

byte转成对应的int或long

29bace5b1af9fcd3959479104a73b286.png

数组合并方法

0ce270ee4f153878e73a66ee60e913b8.png

计算校验和

校验令牌:

1cdc9ec5e6d2e6d90e51b5e82a4d61c7.png

校验令牌1

7cea53f0c238a730ed33c1a57d557c20.png

校验令牌2

四、令牌加密和解密

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

AES加密算法用于加密用户信息及生成的令牌;SHA-1算法用于计算用户密码和令牌的校验和;Base64将AES加密后的令牌编/解码。

以AES加解密举例:

06fb25e1ff472b47b3fc8feaef729a38.png

AES加密

8daea4f0cf80c2f4f5519ab29476b4d9.png

AES解密

本例只是单点登录的一种方案,关于令牌结构和安全性方面,可以根据各自在项目中的需要进行定制化开发,例如:可以先对令牌进行AES对称加密,再使用RSA进行非对称加密提高令牌的安全性。等等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值