关于(第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回答

张勤一

2021-07-22

同学你好:

    (1)第一个问题,这里你对 JWT 的理解有些偏差,JWT 里面当然是含有会话管理的功能,你可以看到,JWT 里面我是设置了过期时间的;你所说的 Redis 存储 Token 之类的,还是之前的那种 Session 会话,与 JWT 的思想不一样;只是说,JWT 是把信息和会话放到了客户端(需要好好理解下)

    (2)鉴权当然是放到网关里面,这里有一点你需要知道,微服务内部的通信如果再有鉴权,这是很奇怪的,99% 的场景下是没有必要的,你的请求都已经能够通过网关的鉴权校验了,后面没有必要再去对这个请求做限制;所以,鉴权就是放在网关去做的,把规则设定好就可以了

    (3)我们这里并没有单点登录的思想,当然,你可以把它用来实现单点登录,只是少了一步授权的过程;单点登录获取 Token 是有两步的,一步是获取授权码,第二步再去拿授权码去授权服务器获取 JWT Token(可以简单查查单点登录的思想)

    (4)怎么选择完全看个人喜好,对于我来说,我更习惯自己写代码去控制;所以,如果你更喜欢 Spring Security 这样的工具,自己去集成就好。

1
3
鲨鱼辣椒不加辣
非常感谢!
2021-07-22
共3条回复

Spring Cloud / Alibaba 微服务架构实战

从架构设计到开发实践,手把手实现

1210 学习 · 674 问题

查看课程