微服务,认证,鉴权,授权 机制如何设计比较通用合理.

2023-07-25 13:09:11 +08:00
 dnjat

查了些资料. 大多都是网关 Gateway,做认证.鉴权. 也有根据实际情况,在 gateway 做认证和部份鉴权+单微服务内做业务鉴权. 我觉得自己的比较合适第二种,gateway+单微服务这种方式.但还有几点疑惑还在犹豫中

环境: spring cloud gateway,nacos,openfeign,(认证.鉴权,授权未使用三方库)

gateway 层

单个微服务层

授权


这些只是一些构思,还没有去实现,肯定有不合理的地方,也有些问题还没考虑到.

欢迎大家指点一二. 让我能有机会一次性比较全面的完成这个模块.

1391 次点击
所在节点    程序员
7 条回复
anonydmer
2023-07-25 15:06:40 +08:00
1. 网关对内外处理的数据结构不一样是很常见的做法,比如外部认证用 cookie ,然后转成 jwt 传给内部微服务,这个过程要附带什么信息随你
2. 权限列表到处跑有什么问题?大多数网关到微服务都是内部调用;不存在带宽和性能瓶颈
3. 微服务自己做鉴权,依赖一个 jwt 中权限信息也没啥大不了的,这一步完全可以做到只需要离线验证 jwt 合法就可以,不需要去调用认证服务
4. 退一步讲,实在要在微服务中去认证服务实时获取权限项也不是什么大问题,微服务的一个好处是单个服务的性能可以优化到极致,只需要把你的认证服务性能优化到足够好就可以了,经典的方法如用缓存
retanoj
2023-07-25 15:55:21 +08:00
是不是感觉引入一个较成熟的,可配置的鉴权组件比较好?
dnjat
2023-07-25 21:33:18 +08:00
@anonydmer
权限列表到处跑,有点大,放到 header 中,得生成一个比如 base64 的块(或其它方式,反正自己解析就好了),如果权限越多,这个字符串块越大. 或者放到 post 参数中.这个又有点涉及到入侵了.
离线验证是不不错的想法.
用户权限列表是放在 redis 中,这过程倒不是很复杂,只是网关层获取了一次,跑到微服务中又获取一次,感觉有点多余了.
谢谢老兄的分析,看了你的分析,大概明白我想要的结构了
dnjat
2023-07-25 21:35:52 +08:00
@retanoj jwt,spring security shiro 这些吗
retanoj
2023-07-26 08:51:44 +08:00
@dnjat
casbin 这种可配置的吧,可能还有更好的

spring security/shiro 感觉还是有一定的开发量
retanoj
2023-07-26 08:54:23 +08:00
@dnjat
我见过的设计方案,是网关和基础的认证&授权是在一起的,也算避免了所谓的授权服务独立后,网关查一次,下游服务查一次的问题
如果下游服务还有特殊授权要求,那下游服务可以自己做额外功
dnjat
2023-07-26 10:27:42 +08:00
@retanoj 我了解下 casbin,说不定很适合我的场景.
我也查了些资料,大部分都是在网关做认证,授权的. 但务业权限,数据权限.网关就控制不了. 还是需要在下游服务中再鉴权一次. 如果有服务调用服务,就得多加载几次权限了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/959513

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX