V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
limyel
V2EX  ›  程序员

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

  •  
  •   limyel · 238 天前 · 3266 次点击
    这是一个创建于 238 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    • 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  
       238 天前
    自己写,问下 chatgpt ,Spring Security 复杂度直线下降 80%。写好后能用几年
    zzmark06
        2
    zzmark06  
       238 天前 via Android
    理论应当框架化,实际自研比重相当大
    微服务场景,插件化更重要,让各个服务能尽可能便捷接入。
    不过公司内技术垃圾,更推荐丢了煞笔的微服务,

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

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

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

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

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

    事实上微服务压根就不需要什么 OAuth 。
    你单体架构里的 Service 替换成 RPC 调用就是微服务了,用不用 OAuth 跟是不是微服务没有任何关系。
    Ashe007
        22
    Ashe007  
       235 天前
    一群若知,完全不懂装懂
    Ashe007
        23
    Ashe007  
       235 天前
    1.从业年龄<3 年
    选 Spring Security 方案实现,作用于网关(SpringClou d 的 Gateway/Netflix 的 Zuul),微服务系统的请求都是通过网关同一进入系统内的,在此处进行鉴权&授权。tips:认证授权的核心与 AOP 没有关系
    2.从业年龄≥3 年
    建议辞职,把岗位让给有能力的人,还自研都出来了 你理解 Oauth2 协议吗?
    totoro52
        24
    totoro52  
       235 天前
    我选了 Spring Security ,我单独设计了一个认证服务, 网关去调认证, 写了个注解去扫描每一个控制器的 path ,自动配置入库,分配权限时就是分配这个 path , 一个请求进来了就取 path 去判断, 判断这块也是拿 Spring Security 去做,它自带一大堆 filter 和 handler ,改改就可以轻松完成这些需求,就这样就完成了认证和鉴权。 认证那块我没使用 Security 的 oauth2 ,慎用他, 坑非常多。
    totoro52
        25
    totoro52  
       235 天前
    另外你说的 Oauth2 ,这个和微服务有直接关联吗。。。Oauth2 是用来连通两个站点之间的账号体系的授权,好像和微服务没啥关系吧,或者说你的微服务没有网关,每个服务单独一个域名? 为了做域名之间的认证? 那也和 Oauth2 没啥关系,应该和单点登录有关系
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3423 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 11:25 · PVG 19:25 · LAX 03:25 · JFK 06:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.