请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于(第6章 授权、鉴权中心微服务)章节,会话管理的问题

老师您好:

关于授权、鉴权中心微服务有几个问题想请老师解答

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 这样的工具,自己去集成就好。

1 回复 有任何疑惑可以回复我~
  • 提问者 鲨鱼辣椒不加辣 #1
    感谢您的耐心解答。
    关于第一个问题,是我没描述清楚,有个应用场景是,超级管理员把A用户封禁的情况,不给他登录,那么他在这Token的有效期内还是可以操作的,不能做到强制其即时生效不能操作系统。
    回复 有任何疑惑可以回复我~ 2021-07-22 13:58:17
  • 张勤一 回复 提问者 鲨鱼辣椒不加辣 #2
    当然是可以实现的,你在代码里面定义个规则,按照名单筛选不能通过校验的用户不就可以了。
    回复 有任何疑惑可以回复我~ 2021-07-22 14:00:24
  • 提问者 鲨鱼辣椒不加辣 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2021-07-22 16:27:20
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信