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

SpringSecurity 我怕了

  •  
  •   totoro52 · 2021-08-16 15:03:08 +08:00 · 8844 次点击
    这是一个创建于 1221 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近项目用了 security 需要对接钉钉和企业微信的登录,看了下官方文档,在 5.2 之前需要引入一个 oauth 包,后面 5.2 需要引 ouah2-client 包,开开心心的引入了,才知道噩梦才开始
    官方自带的配置文件使用 client_id 字段作为默认 appKey,但钉钉叫 appid 、、、需要单独配置一个 resolver 去替换
    换好了,发起授权正常,轮到回调 code 了,默认的直接是直接把 code 码 post 到指定的网址,结果钉钉也不一样,需要签名,然后又配置一个 converter,
    我现在犹如吃了屎一样难受,我直接自己写个应该已经好了也不至于浪费一天时间

    总结一句话,如果要对接 oauth2,请直接避开官方提供的代码,直接手撸

    config

    第 1 条附言  ·  2021-08-17 09:32:15 +08:00
    security 提供的一个用于 oauth2 认证的包,我起初天真的以为 这玩意拿来就能用,但是发现,钉钉的流程完全就是魔改了,如果要对接 github google,YouTube 等网站,可以用这个包,因为官方默认就提供了支持,配置几行就能用,国内的应用请直接避开,配置到最后你会发现根本用不了
    第 2 条附言  ·  2021-08-17 09:34:54 +08:00
    官方的 oauth2 包提供的思路非常不错,可以尝试去读一下源码,我目前按照他的思路,自己实现了认证,也达到了预期的效果,而且这个包用了一大堆骚写法和设计模式,可以去瞧瞧。
    53 条回复    2021-08-23 11:08:37 +08:00
    ifsclimbing
        1
    ifsclimbing  
       2021-08-16 15:16:50 +08:00
    人生苦短, 我用 python
    Sasasu
        2
    Sasasu  
       2021-08-16 15:18:46 +08:00
    「面向切面编程」
    Grande
        3
    Grande  
       2021-08-16 15:22:51 +08:00   ❤️ 2
    这味道比杯子里面的拿铁还新鲜
    HiShan
        4
    HiShan  
       2021-08-16 15:25:52 +08:00
    这只是 Security 的一个认证功能吧。它还提供后续很多其他权限管理的功能不需要自己实现
    qwerthhusn
        5
    qwerthhusn  
       2021-08-16 15:26:13 +08:00   ❤️ 2
    从来不用 Spring Security,只是感觉这玩意增加工作量的

    自己手写也不算很复杂
    jorneyr
        6
    jorneyr  
       2021-08-16 15:27:23 +08:00
    为了支持更多的第三方 OAuth2,直接用 JustAuth,ScribeJava 等 OAuth2 工具直接硬上,实现一个 OncePerRequestFilter 到 UsernamePasswordAuthenticationFilter 前面是不是更直观。
    HiShan
        7
    HiShan  
       2021-08-16 15:27:26 +08:00
    @HiShan 如果只需要 OAuth2,完全可以自己实现。
    totoro52
        8
    totoro52  
    OP
       2021-08-16 15:28:42 +08:00
    @HiShan 是的 security 提供的一个用于 oauth2 认证的包,我起初天真的以为 这玩意拿来就能用,但是发现,钉钉的流程完全就是魔改了,如果要对接 github google,YouTube 等网站,可以用这个包,因为官方默认就提供了支持,配置几行就能用,国内的应用请直接避开,配置到最后你会发现根本用不了
    totoro52
        9
    totoro52  
    OP
       2021-08-16 15:29:30 +08:00   ❤️ 3
    虽然吃了点亏 但还是把 oauth2 源码看了个遍 还是学了点东西
    ikas
        10
    ikas  
       2021-08-16 15:37:37 +08:00
    如果你又需要对接另一个接口.他又有不一样的配置,是不是自己又要 copy 代码写一套?
    totoro52
        11
    totoro52  
    OP
       2021-08-16 15:39:03 +08:00
    @ikas 是的 比如我要对接企业微信 企业微信的流程比较规范 所以不需要改动很多 ,但钉钉我是真怕了
    warcraft1236
        12
    warcraft1236  
       2021-08-16 15:40:58 +08:00
    这只能说明钉钉垃圾啊,手动狗头
    totoro52
        13
    totoro52  
    OP
       2021-08-16 15:43:14 +08:00
    @warcraft1236 钉钉的这个流程我是没想到 大意了 更骚的还是钉钉提供了 sdk 但没有上 maven 我只能自己传到私有库
    shot
        14
    shot  
       2021-08-16 16:24:24 +08:00   ❤️ 1
    钉钉的锅,不要甩到 Spring Security 上。
    XhstormR02
        15
    XhstormR02  
       2021-08-16 17:00:18 +08:00 via Android
    Spring Security 还是很好用的
    a728976009
        16
    a728976009  
       2021-08-16 17:16:08 +08:00
    oauth2 协议里就是 clientid,这只能说明叮叮没支持标准的 oauth2 或 oidc 协议
    EarthChild
        17
    EarthChild  
       2021-08-16 17:28:13 +08:00
    可以安利客户使用企业微信。说钉钉不安全或维护费用成本较高。钉钉的锅,不要甩到 Spring Security 上。
    NXzCH8fP20468ML5
        18
    NXzCH8fP20468ML5  
       2021-08-16 17:33:12 +08:00
    用过 aspnetcore 的 Identity 就知道 Spring Security 的真香了
    cheng6563
        19
    cheng6563  
       2021-08-16 17:47:20 +08:00
    @totoro52 你肯定没对接企业微信的文件上传,企业微信的 multipart/form-data 就是魔改的。
    cp19890714
        20
    cp19890714  
       2021-08-16 19:49:19 +08:00   ❤️ 2
    在微服务中使用 spring security oauth2 后, 我很后悔.
    因为需要实现一些其中没有的 但并不复杂的特性, 得先看大量源码, 然后再改. 真折磨人.
    花费的时间比自己手写都要长.

    当然, 也可以说是自己选型失败, 对 spring security oauth2 的细节不熟悉, 导致与需求不符.
    cwek
        21
    cwek  
       2021-08-16 20:18:38 +08:00
    没办法,中国和世界是不同的(摊手
    leonme
        22
    leonme  
       2021-08-16 21:20:51 +08:00 via iPhone
    @ifsclimbing 跳槽你就懂了,没啥公司用
    meshell
        23
    meshell  
       2021-08-16 21:44:14 +08:00
    你接微信,QQ 登录也这样的,我有个项目也这样,这些魔改过的 oauth2 用这些通用的库接起来真难受。
    wangxiaoaer
        24
    wangxiaoaer  
       2021-08-16 22:08:28 +08:00
    @HiS #4 举个例子?
    vjnjc
        25
    vjnjc  
       2021-08-16 23:37:26 +08:00
    楼主说的没错,我记得 security 里的 role 也很魔性,要一个固定的 prefix
    unlimitedsola
        26
    unlimitedsola  
       2021-08-17 00:26:56 +08:00
    明明是钉钉不按规范实现 OAuth2, 不要甩到 Spring Security 上。
    changdy
        27
    changdy  
       2021-08-17 00:28:57 +08:00
    借楼 提问 spring 上面 比较好的安全认证框架是什么?
    security 涵盖了太多的内容 ,感觉也不是为了 restful 而生.
    xuanbg
        28
    xuanbg  
       2021-08-17 08:10:44 +08:00
    @cwek 说得好像自己是羊带人似的。。。Spring Security 之屎,那是全球都是有口皆碑的
    geekboy
        29
    geekboy  
       2021-08-17 08:53:56 +08:00
    @changdy shiro
    fpure
        30
    fpure  
       2021-08-17 08:57:42 +08:00
    我不太理解,像认证鉴权之类需求真的需要框架来帮我们实现吗,这不应该是业务系统的职责吗,Spring Security 有存在的必要吗?
    huiyanpohundh123
        31
    huiyanpohundh123  
       2021-08-17 08:57:56 +08:00
    用 springsecurity 实现 jwt 发现自己只用到了 SpringContext 这个全局上下文获取用户令牌用 和 借用了 HTTPBasicAuthFilter 的思想
    Oktfolio
        32
    Oktfolio  
       2021-08-17 08:59:53 +08:00
    @geekboy Spring Security 比 shiro 好多了...不用 Spring Security 的 oauth2 不就好了...
    @changdy RESTful 只是一种 web api 设计风格...
    chocotan
        33
    chocotan  
       2021-08-17 09:00:12 +08:00   ❤️ 1
    各家的 oauth2 都有些魔改,spring-security 难道要每个都适配一下?
    spring-security 的 oauth2-client 和同样是 Spring-security 的 oauth2 server 配合起来还是不错的。
    jorneyr
        34
    jorneyr  
       2021-08-17 09:01:55 +08:00   ❤️ 1
    @vjnjc ROLE_ 前缀坑惨了不少人
    gitdoit
        35
    gitdoit  
       2021-08-17 09:04:21 +08:00
    要用 spring security,首先需要读源码,这就厉害了
    Cbdy
        36
    Cbdy  
       2021-08-17 09:17:30 +08:00 via Android
    别用 Spring Security
    Mithril
        37
    Mithril  
       2021-08-17 09:19:29 +08:00   ❤️ 2
    @xxfye Identity 可比 Spring Security 好多了。
    它属于那种一看就知道做的很烂然后你就根本不会去用的。
    不至于先把你骗到坑里然后一锅端。
    feelinglucky
        38
    feelinglucky  
       2021-08-17 09:27:22 +08:00
    @Cbdy 那用啥?
    gmywq0392
        39
    gmywq0392  
       2021-08-17 10:02:10 +08:00
    老哥 如果是 OIDC 呢 最近也在做这个
    Cbdy
        40
    Cbdy  
       2021-08-17 10:02:42 +08:00 via Android
    @feelinglucky 简单自己写一下
    leafre
        41
    leafre  
       2021-08-17 10:06:47 +08:00
    这些毒瘤不遵守 OAuth2.0 规范,能怪 Spring Security?
    cweijan
        42
    cweijan  
       2021-08-17 10:06:56 +08:00
    @ifsclimbing 都什么年代了还吹 python
    gmywq0392
        43
    gmywq0392  
       2021-08-17 10:08:10 +08:00
    还有,是不是老哥用的版本太新了
    raptor
        44
    raptor  
       2021-08-17 10:37:26 +08:00
    这也怪 SpringSecurity ?难道不是因为钉钉没遵守 OAuth2.0 规范么?
    a719031256
        45
    a719031256  
       2021-08-17 11:48:35 +08:00
    Security----靠谱
    钉钉----垃圾
    siweipancc
        46
    siweipancc  
       2021-08-17 12:45:22 +08:00 via iPhone   ❤️ 1
    征集有志之士开发,一个国产的安全框架,能全自动适应国内魔改那种
    tt0411
        47
    tt0411  
       2021-08-17 12:51:35 +08:00
    "官方的 oauth2 包提供的思路非常不错" 指的是 钉钉 的包吗?
    totoro52
        48
    totoro52  
    OP
       2021-08-17 14:42:20 +08:00
    @gmywq0392 这个 oauth2 包也支持 OIDC 可以查看下 oauth2-client 包下的 oidc 源码,不多 就几个类 看一遍借鉴一下就 OK 了
    totoro52
        49
    totoro52  
    OP
       2021-08-17 14:42:40 +08:00
    @tt0411 spring
    night98
        50
    night98  
       2021-08-17 20:12:32 +08:00
    国产的 sa-token 挺不错的,试用了一下效果还挺好,主要内置挺多功能的,比 security 自己要手写一堆东西靠谱
    gmywq0392
        51
    gmywq0392  
       2021-08-18 10:44:19 +08:00
    @totoro52 嗯嗯 确实
    xiaoxinshiwo
        52
    xiaoxinshiwo  
       2021-08-18 16:21:51 +08:00
    @totoro52 常有的事,钉钉文档写的也很垃圾
    mikulch
        53
    mikulch  
       2021-08-23 11:08:37 +08:00
    spring security oauth2 是真的很复杂。我们之前也做过调研,后来弃用了,太难了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5186 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 01:23 · PVG 09:23 · LAX 17:23 · JFK 20:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.