用户认证-三种单点登录算法的比较

一般用于跨域身份验证

第一种:共享Session

在很早之前,技术栈没那么丰富,并发量没有那么高的时候,采用的方法.
做法是将用户认证Token存到Session中,再将Session存到Redis中,让Redis作为一个Session连接池.业务模块需要用户验证的时候就将此时自己Session中的Token和Redis中的Token做一对比.如果相同,则验证成功.
但是,将Token放进Session,又将Session放进Redis,有点多此一举,为什么不直接将信息放进Redis呢?

第二种:将Token放入Redis存储

有了以上方案,我们想,直接把Token放进Redis会好一点,于是就将用户信息的Token放入Redis.让业务模块需要用户验证的时候直接在Redis中取Token.但同时带来了另一个问题,就是每一次业务模块验证时,都需要开db的连接,在高并发的情况下是十分不安全的,容易让Redis挂掉,我们想有没有一种方式能不通过连接数据库的方式来进行用户验证呢.

第三种:JWT(JSON Web Token)

这是一种将Token存进内存中的操作,通过用户自定义的一个加密算法(算法中需要包含用户的ID认证信息),加密用户信息,生成一个Token存入内存中,此时使用jar包的形式让服务端通过解密算法得到Token中的内容进行验证.
通过加密-解密的操作,避免了每次都去开db的连接,这样就直接免去了多次访问db有可能会造成的风险.
不过我们有时也会把Token存进Redis中,以省去解密的过程.

一个JWT由三部分组成 公有部分,私有部分,签名部分 最后由这三者组合进行base64编码得到JWT

用户认证-三种单点登录算法的比较

公有部分是声明加密算法

私有部分存储用户的基本信息

签名部分是JWT生成的无法**的字符串,通过这一部分辨别真伪