一、 token 分类
SpringSecurityOauth2令牌
参考 URL : https :// www . yuque . com / gaoxi -dj1fr/ fxgaxe / ivvpqc
1.普通令牌的作用:唯一标识存贮在数据库或内存中的用户信息,在认证时, SpringSecurity 拿着普通令牌去数据库中查询用户信息使用
2.jwt令牌的作用: jwt 令牌中本身存储着用户信息,在认证时, SpringSecurity 从 jwt 令牌中解析出用户信息即可,不需要借助数据库等进行存储
1.普通令牌
普通令牌是SpringSecurityOauth2给客户端颁发的一个无含义的令牌,在令牌发布时,SpringSecurityOauth2将用户信息存储到程序指定的存储位置,并用普通令牌唯一标识这个存储信息,当用户再次携带令牌访问时,SpringSecurityOauth2会根据令牌查询用户信息,进而实现权限角色的限制。
普通令牌需要一个存储用户信息的地方,这个地方可以内存,也可以是数据库( Redis 、 Mysql )。
基于数据库存储(以 Redis 为例)
①基于 Redis 存储用户信息的方式,认证服务器将用户信息存储到指定的 Redis 数据库中
当资源服务获取到 access _ token 时,会到 Redis 中获取用户信息
③在微服务场景下适用2. JWT 令牌
jwt 令牌的方式就无需数据库的介入, jwt 令牌中就包含着用户的信息, SpringSecurityOauth 在发布令牌时,会将用户信息放入 JWT 令牌中,用户拿着 JWT 令牌时, SpringSecurityOauth 从中获取到用户信息,实现用户权限的控制。
jwt 不需要后端进行存储。
①基于 JWT 令牌的认证服务器,用户信息存储到令牌中
②当资源服务获取到 access _ token 后,会解析这个 jwt 类型的 access _ token ,从中会获取到用户信息
③微服务场景下也不适用二、应用场景
APP 服务端接口,用 jwt 还是用 redis 和 token ,分别有什么优势
参考 URL : https :// blog . csdn . net /u014756827/ article / details /103047695
1.根据权限是否要求严格角度判断
流行的 jwt 有一个设计上的缺陷,他通过密文传输用户信息,那么服务器在这种基础结构下是无法做到关闭用户登陆授权的操作,如果用户的 jwt 密文被偷窃,那么黑客就能以用户身份登陆,并且即使知道密文丢失,也无法关闭被偷窃的 jwt 密文。为了应对这一问题,可以使用 jwt 内部验证有效期和 jwt 黑名单模式,但是有效期始终无法做到及时停止 jwt 授权,这是一个治标不治本的方法。而 jwt 黑名单模式,则需要数据库或内存存储黑名单,那么,这实际上违背了 jwt 的免数据库设计原则。
因此,如果严格按照两种模式设计, jwt 更适合低安全级别的服务器设计,如普通的博客、阅读器等等,这种服务允许不严格的登陆授权,即使密文丢失也不会造成用户的严重损失,却能获得较高的服务性能。
token 模式,必须配合数据库进行存储和查询,因此性能较低,但 token 模式却能做到及时的授权关闭,已经登陆授权可见可查,每一次 token 都会有对应的记录。因此 token 模式适合较高安全度和用户登陆等信息分析的系统,如政府系统,支付系统等不可能允许高权限的 token 被偷窃却不能及时关闭授权。
jwt ,适合轻量的系统和权限不严格系统。
token ,适合重量系统和权限有严格要求的系统。