最近业务上面碰见了一个需要实现单点登录的问题,其主要需求就是,成功登录A项目后,通过点击一个链接能够直接跳转到B项目并且不需要登录B项目。
在这个过程中呢,当我们点击URL的时候,请求会获取A项目中的角色名称以及事先存在a项目中的公钥(注意这里的公钥与B项目中的私钥是对应的,公钥用来加密,私钥用来解密)与当前的时间戳拼接之后进行加密,当作参数发起请求,请求之后,B项目这里就得到了A项目中的用户名和公钥以及时间戳对应的加密字符串,我们通过私钥对这个字符串进行解密,就可以得到角色名,那么再进行角色查询,如果表里面确实存在这个角色,那么B项目会生成当前的token并且在redis中对这个token设置过期时间,在这个时间段内,A项目可以通过B项目的token进行访问;
大致实现需求就是这样,这也是单点登录的实现原理,还有一种方式是通过oAuth协议进行实现,oAuth协议的话直接通过公钥和私钥进行授权,可以不用通过获取用户信息。