Java 微服务场景下的认证授权,大家是用现成的框架还是自研呢 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
limyel
V2EX    程序员

Java 微服务场景下的认证授权,大家是用现成的框架还是自研呢

  limyel 2024-04-03 15:48:39 +08:00 4261 次点击
这是一个创建于 565 天前的主题,其中的信息可能已经有所发展或是发生改变。

如题,最近一直在搞微服务场景下的认证授权,总是感觉力不从心。

  • Spring Shiro:基本不考虑了
  • Spring Security:配置 OAuth2.0 服务器有点麻烦,而且 SpringBoot2.XX 下原来那套废弃了,新的 SAS 只能用 0.4.X 版本的,又不想升级到 SpringBoot3.X + JDK17+。
  • sa-token:目前在尝试用这个,用起来感觉比 Spring Security 清爽很多,清明试试看效果如何。
  • 自研:正在考虑

我们公司技术很垃圾,所以我想请教一下大家在生产中是用什么呢?

自己写一套合适吗(感觉就是利用过滤器和 AOP ),如果自己写的话需要注意哪些地方(特别是微服务场景下)呢?

25 条回复    2024-04-06 00:43:22 +08:00
LPJD
    1
LPJD  
   2024-04-03 15:55:39 +08:00
自己写,问下 chatgpt ,Spring Security 复杂度直线下降 80%。写好后能用几年
zzmark06
    2
zzmark06  
   2024-04-03 15:56:31 +08:00 via Android
理论应当框架化,实际自研比重相当大
微服务场景,插件化更重要,让各个服务能尽可能便捷接入。
不过公司内技术垃圾,更推荐丢了煞笔的微服务,

给别人打个广告,权限问题可以看一眼 casbin 这个库,功能比较全面,接入尚且算简单。单点登录(第三方登录)还有它家八竿子打不到的 casdoor ,都挺强悍
ilovey482i
    3
ilovey482i  
   2024-04-03 16:05:30 +08:00
采用现成的 API 网关不香吗?你可以看看现成的 API 网关
limyel
    4
limyel  
OP
   2024-04-03 16:13:26 +08:00   1
@zzmark06 真的想丢了微服务,我们公司是一个人负责好几个服务,单体架构下 Spring Security 也是眉清目秀,上了所谓的微服务一下子把开发成本拉上去了哎
limyel
    5
limyel  
OP
   2024-04-03 16:14:03 +08:00
@LPJD 多谢提醒,我去试试哈
limyel
    6
limyel  
OP
   2024-04-03 17:24:00 +08:00
@ilovey482i 意思是说用其他网关吗
521jx123OvO
    7
521jx123OvO  
   2024-04-03 17:35:10 +08:00
我们使用了 SpringSceurity+SpringAuthonizationServer 技术难度直线提升,现在看 satoken 很眉清目秀
wxw752
    8
wxw752  
   2024-04-03 17:38:35 +08:00
目前用的是 Spring Security OAuth2.0
dongdong12345
    9
dongdong12345  
   2024-04-03 20:35:49 +08:00
sa-token 可以吗
infreboot
    10
infreboot  
   2024-04-03 21:05:12 +08:00   1
satoken 看文档要 star 不用了。
Akitora
    11
Akitora  
   2024-04-03 22:41:10 +08:00   1
前段时间刚趟过这坑,建议是要么自己写简单的过滤器拦截器,并且自己签发 token ,验证 token 。

要么引入 Spring Security ,配置成 Resource Server ,配合一个正儿八经的 Oauth2 Authorization Server ,也不一定非得用 Spring Authorization Server ,事实上我嫌弃它太耗内存,用 Go 糊了一个勉强能用的。

这两种方式都不算太麻烦,就怕你非得引入 Spring Security 又想自己签 token 验 token ,那你得把 Spring Security 内部流程理清然后重写好一部分接口实现,真心不推荐。
winRain
    12
winRain  
   2024-04-04 01:05:47 +08:00
我有一套完整的微服务认证、鉴权、支持 OAuth2 、SAML 、且可拓展、安全性高的方案,直接开箱即用,要不贵司考虑一下让我直接过去?哈哈哈
midsolo
    13
midsolo  
   2024-04-04 07:56:54 +08:00
我司 ToB 系统用 Spring Security ,ToC 系统用自研的组件( ToC 系统一般不会使用重量级的框架)。

自研组件就 30 多个类,以微内核 + 插件化 + SPI 的方式组成了过滤器链,可快速插拔。
BarackLee
    14
BarackLee  
   2024-04-04 08:20:30 +08:00
用 JWT 吧,面试的时候还能吹吹水,什么分布式 session 一致之类的,token refresh 这种
gongquanlin
    15
gongquanlin  
   2024-04-04 09:53:22 +08:00
sa-token 的文档按 f12 里面有注释,可以去掉 star 限制
limyel
    16
limyel  
OP
   2024-04-04 10:04:12 +08:00
@lmq2582609 在用了,目前用 satoken 在网关认证,在各个服务做鉴权,比 Spring Security 上手快...
zzmark06
    17
zzmark06  
   2024-04-04 17:39:40 +08:00 via Android
授权是个麻烦玩意,尤其是既要又要,还不想遵循现有标准,更麻烦了
spring security 就是个超级大一统框架,要啥有啥,要啥都麻烦,毕竟起夜级定制太多,也能理解
小项目,这些都用没有,找个新一些热门一些的库按基本流程去掉一切定制想法,差不多就是 OK 的了
tairan2006
    18
tairan2006  
   2024-04-04 18:06:21 +08:00 via Android
自己写
limyel
    19
limyel  
OP
   2024-04-04 21:32:57 +08:00
@Stevenv 钱难挣屎难吃,虽然恶心但还是用了
limyel
    20
limyel  
OP
   2024-04-04 21:36:05 +08:00
@Akitora 我们现在就是最后一种状态,看了一下别人用的 Spring Security Oauth2 ,感觉实现了很多自定义的东西但是不知道为什么要这么做...不过自己写的话上生产会不会有什么安全问题,因为感觉认证授权这套东西要考虑的东西会比较多?框架会不会做的更全面一些
fkdog
    21
fkdog  
   2024-04-05 00:23:20 +08:00
像 OAuth 这种流程可以自己实现,原理也不难。

这种认证授权最大的难点在与安全两个字,大部分开发不是很少涉猎安全领域,自己实现的登陆功能往往都是漏洞百出。很多公司内网系统,随便扫扫,什么 xss 、csrf 、session fixation 都能扫出来。所以对于安全类的功能,不要自己造轮子。

事实上微服务压根就不需要什么 OAuth 。
你单体架构里的 Service 替换成 RPC 调用就是微服务了,用不用 OAuth 跟是不是微服务没有任何关系。
Ashe007
    22
Ashe007  
   2024-04-05 21:33:03 +08:00
一群若知,完全不懂装懂
Ashe007
    23
Ashe007  
   2024-04-05 21:34:16 +08:00
1.从业年龄<3 年
选 Spring Security 方案实现,作用于网关(SpringClou d 的 Gateway/Netflix 的 Zuul),微服务系统的请求都是通过网关同一进入系统内的,在此处进行鉴权&授权。tips:认证授权的核心与 AOP 没有关系
2.从业年龄≥3 年
建议辞职,把岗位让给有能力的人,还自研都出来了 你理解 Oauth2 协议吗?
MIUIOS
    24
MIUIOS  
   2024-04-06 00:39:19 +08:00
我选了 Spring Security ,我单独设计了一个认证服务, 网关去调认证, 写了个注解去扫描每一个控制器的 path ,自动配置入库,分配权限时就是分配这个 path , 一个请求进来了就取 path 去判断, 判断这块也是拿 Spring Security 去做,它自带一大堆 filter 和 handler ,改改就可以轻松完成这些需求,就这样就完成了认证和鉴权。 认证那块我没使用 Security 的 oauth2 ,慎用他, 坑非常多。
MIUIOS
    25
MIUIOS  
   2024-04-06 00:43:22 +08:00
另外你说的 Oauth2 ,这个和微服务有直接关联吗。。。Oauth2 是用来连通两个站点之间的账号体系的授权,好像和微服务没啥关系吧,或者说你的微服务没有网关,每个服务单独一个域名? 为了做域名之间的认证? 那也和 Oauth2 没啥关系,应该和单点登录有关系
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1021 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 25ms UTC 22:51 PVG 06:51 LAX 15:51 JFK 18:51
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86