关于(第6章 授权、鉴权中心微服务)章节,会话管理的问题
来源:6-9 授权、鉴权中心微服务总结

鲨鱼辣椒不加辣
2021-07-21
老师您好:
关于授权、鉴权中心微服务有几个问题想请老师解答
1、关于会话管理的问题
按照课程现有的实现是不支持会话管理的,而会话管理在一般XX后台管理系统中是非常重要的。
如果我想用JWT而且想要会话的功能该怎么办呢?
我查阅网上的资料,有的人的实现方式是在鉴权后,分发Token同步存入Redis中且加上过期时间,让Redis去管理Token的过期时间,每次鉴权都先看Redis中是否还有此Token,如果没有则不通过。
此方法等于把JWT中的过期时间完全丢弃不用,而且跟session方式如出一辙。已然违背了JTW的设计初衷。但是还是有一个可取的地方,Token没有过期的话,角色等附加的不敏感信息不用像session方式一样去数据库查询了。
这种畸形的方式是否可取?
如何兼顾JTW和会话管理,如果会话管理优先级第一,该怎么在微服务中实现?
2、后续鉴权是怎么一个思路
如果把鉴权放在网关,那么微服务内部的依赖调用则是裸奔,这样会不会有安全隐患?微服务内部每次都鉴权则又过于臃肿,想请教真正的企业级生产环境中是怎么一个思路,想请老师简单描述一下。
3、目前是否已然实现了单点登录?真正的企业级生产环境也是这样做的吗?
4、为什么没有用 Spring Security 实现授权和鉴权部分呢?
感谢解答!
1回答
-
同学你好:
(1)第一个问题,这里你对 JWT 的理解有些偏差,JWT 里面当然是含有会话管理的功能,你可以看到,JWT 里面我是设置了过期时间的;你所说的 Redis 存储 Token 之类的,还是之前的那种 Session 会话,与 JWT 的思想不一样;只是说,JWT 是把信息和会话放到了客户端(需要好好理解下)
(2)鉴权当然是放到网关里面,这里有一点你需要知道,微服务内部的通信如果再有鉴权,这是很奇怪的,99% 的场景下是没有必要的,你的请求都已经能够通过网关的鉴权校验了,后面没有必要再去对这个请求做限制;所以,鉴权就是放在网关去做的,把规则设定好就可以了
(3)我们这里并没有单点登录的思想,当然,你可以把它用来实现单点登录,只是少了一步授权的过程;单点登录获取 Token 是有两步的,一步是获取授权码,第二步再去拿授权码去授权服务器获取 JWT Token(可以简单查查单点登录的思想)
(4)怎么选择完全看个人喜好,对于我来说,我更习惯自己写代码去控制;所以,如果你更喜欢 Spring Security 这样的工具,自己去集成就好。
132021-07-22
相似问题