V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
limyel
V2EX  ›  程序员

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

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

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

    • 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 可以吗
    Stevenv
        10
    Stevenv  
       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 、且可拓展、安全性高的方案,直接开箱即用,要不贵司考虑一下让我直接过去?哈哈哈
    dlmy
        13
    dlmy  
       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 协议吗?
    totoro52
        24
    totoro52  
       2024-04-06 00:39:19 +08:00
    我选了 Spring Security ,我单独设计了一个认证服务, 网关去调认证, 写了个注解去扫描每一个控制器的 path ,自动配置入库,分配权限时就是分配这个 path , 一个请求进来了就取 path 去判断, 判断这块也是拿 Spring Security 去做,它自带一大堆 filter 和 handler ,改改就可以轻松完成这些需求,就这样就完成了认证和鉴权。 认证那块我没使用 Security 的 oauth2 ,慎用他, 坑非常多。
    totoro52
        25
    totoro52  
       2024-04-06 00:43:22 +08:00
    另外你说的 Oauth2 ,这个和微服务有直接关联吗。。。Oauth2 是用来连通两个站点之间的账号体系的授权,好像和微服务没啥关系吧,或者说你的微服务没有网关,每个服务单独一个域名? 为了做域名之间的认证? 那也和 Oauth2 没啥关系,应该和单点登录有关系
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2715 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 06:41 · PVG 14:41 · LAX 23:41 · JFK 02:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.