请稍等 ...
×

采纳答案成功!

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

老师麻烦帮忙分析一下这种想法有没有啥问题

老师请看看这种想法是否合理:
图片描述
1.因为默认springsecurity的鉴权机制,每次都要load库,即存在性能瓶颈
2.所以我是这样打算:

  • 单独有一个认证中心(放认证服务器)
  • 网关里面集成鉴权服务器
  • 网关在启动的时候或者懒加载,不同渠道对应角色的资源(资源、接口定义)信息
  • 在用户身份认证完成之后JWT里面(都不用做特殊增强)缓存用户唯一标识和其角色组信息
  • 在下一次请求进来到网关进行统一鉴权的时候,就根据用户的角色去缓存池(redis)中获取用户的全量权限信息,完成鉴权
  • 针对缓存信息,我这边想在user-server哪里通过消息队列来解决缓存信息同步问题。

这样的好处在于身份认证和鉴权不用每次都去db抓全量数据,您觉得是否可行,目前我们实现的是,认证之后单个用户的认证权限信息如redis,这样不好的地方在于每个用户都要如redis,redis本身也存在瓶颈。

不知道我的表述是否清楚 :)

正在回答 回答被采纳积分+3

3回答

JoJo 2019-09-12 08:30:31

了解。按我的理解有两个可以商榷的地方,一是是否需要每个用户的认证权限信息入redis?这样就要保证权限变化时既要同步角色的权限又要同步每个用户的权限。二是只在网关鉴权,有可能出现:通过网关不能访问A,但是可以访问B,而B又调了A,造成越权。

3 回复 有任何疑惑可以回复我~
  • 提问者 jiiiiiin #1
    嗯嗯  针对第一个可能我没有表述清楚,我现在的想法是网关启动的时候就加载缓存了所有角色对应的权限信息,而用户登录之后就只用返回jwt原始内容,下次再进行鉴权的时候就可以通过jwt包含的角色去网关那边匹配对应角色的数据,当然这部分数据为了保持同步使用的(mq+redis)的缓存更新订阅机制,这样做的好处是为了加快鉴权默认查询db的开销  针对第二个问题,鉴权统一放在网关,其实有利有弊,好的地方就是统一鉴权,背后的服务都可以做成“无状态”服务 不好的地方就比如您说的这种越权的情况,还有就是因为实在网关做鉴权,所以ss注解声明式的权限声明方式就不可用,当然我觉得两者应该是可以结合的,就要看项目本身是否需要控制到这个级别。
    当然买这套课程1是为了支持老师,我觉得老师讲的都是满满干货 2是为了学习老师微服务下权限管理的校验,因为我说的这个东西是在听完老师单体ss课程之后自己撸的,当时真想@您为啥还不出这样一门课程 哈哈
    回复 有任何疑惑可以回复我~ 2019-09-12 09:34:51
提问者 jiiiiiin 2019-09-11 22:34:29

@JoJo

0 回复 有任何疑惑可以回复我~
提问者 jiiiiiin 2019-09-11 22:34:01

追加一点,就是,这种思路是不是“最佳”解决方案? 哈哈

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信