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

SpringSecurity 我怕了

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

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

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

    config

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

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

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