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

有什么类似 casdoor 的开源认证系统推荐吗?

  •  1
     
  •   lingly02 · 2022-08-04 09:28:02 +08:00 · 6829 次点击
    这是一个创建于 850 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一直想找一个开源认证平台,可以稍做改造后用于自己的项目。不想重复造轮子。 初步研究了一下前几天论坛里发的 casdoor,发现还是有一些问题,想找下有没有更好的。

    casdoor 的主要问题有(只是粗略看了一下,下面描述如有错误,欢迎批评指正):
    1. 代码编写比较随意,几乎没有注释,大部分代码没有单元测试,不利于二次开发。
    2. 代码扩展性一般,很多内容是硬编码的。比如想增加一个 sms 提供商,至少需要修改 go-sms-sender, casdoor 后端,casdoor Web 端三处代码。
    3. 数据模型极不合理,尤其是主键大量使用组合索引,关联表也不使用外键,而是直接使用字符串字段存储 name ,导致修改一个主表,还需要 update 相关子表。不知道这是遵循一种什么样的建模理论。
    4. 组织没有层次结构,不能满足大部分企业应用需求。
    5. 为什么一个认证平台要加入商品与支付功能?
    57 条回复    2022-10-03 22:35:34 +08:00
    HAWCat
        1
    HAWCat  
       2022-08-04 09:35:03 +08:00   ❤️ 1
    Authelia
    ersic
        2
    ersic  
       2022-08-04 09:36:44 +08:00
    Casdoor 是商业产品吧,开源的是 Casbin 。
    lingly02
        3
    lingly02  
    OP
       2022-08-04 09:38:50 +08:00
    lingly02
        4
    lingly02  
    OP
       2022-08-04 09:41:42 +08:00
    @HAWCat 研究一下
    ihipop
        5
    ihipop  
       2022-08-04 09:44:35 +08:00 via Android
    不使用外键也没啥稀奇的,很多都这样,靠业务和事物保证一致。
    DoveAz
        6
    DoveAz  
       2022-08-04 09:49:07 +08:00
    不使用外键 是为了性能吧,毕竟这里面的信息不怎么修改,基本都是查数据,存起来查自然要快许多
    lingly02
        7
    lingly02  
    OP
       2022-08-04 09:49:30 +08:00
    @ihipop 不使用数据库层面外键约束的系统是很多,但一般子表也会存储父表的主键。 但它是子表没有存储父表的主键。比如 org 表的主键是"owner,name"(组合主键), user 是属于一个 org 的,但它只定义了一个 owner 字段,并且这个 owner 字段的内容,存放的是 org 表的 name 字段值!
    lingly02
        8
    lingly02  
    OP
       2022-08-04 09:50:47 +08:00
    @HAWCat 这个似乎不支持短信验证码登录?
    lingly02
        9
    lingly02  
    OP
       2022-08-04 09:56:07 +08:00   ❤️ 1
    @DoveAz 另外我一向不同意因为性能原因就不使用数据库的主外键约束。绝大部分非互联网应用都不需要先考虑这个问题。使用关系型数据库就是为了保证 ACID 。对于一个认证系统,数据的一致性和完整性才应该是优先考虑的。
    Herry001
        10
    Herry001  
       2022-08-04 10:13:04 +08:00   ❤️ 1
    keycloak
    相比于 keycloak ,casdoor 感觉更像是个人作品……
    Oktfolio
        11
    Oktfolio  
       2022-08-04 10:20:27 +08:00   ❤️ 1
    我想造轮子,目前进度「新建文件夹」
    virgo
        12
    virgo  
       2022-08-04 10:25:24 +08:00   ❤️ 4
    QuinceyWu
        13
    QuinceyWu  
       2022-08-04 10:41:46 +08:00
    有没有支持 LDAP 的轻量的开源认证系统推荐啊
    lingly02
        14
    lingly02  
    OP
       2022-08-04 10:53:42 +08:00
    @QuinceyWu 上面说的几种,除了 ldap ,其他都支持 ldap 吧
    lingly02
        15
    lingly02  
    OP
       2022-08-04 10:55:25 +08:00
    除了 logto, 写错了;-)!
    lovepocky
        16
    lovepocky  
       2022-08-04 11:03:44 +08:00 via iPhone
    @lingly02 这个我也发现了,明显不合理
    joesonw
        17
    joesonw  
       2022-08-04 11:05:16 +08:00 via iPhone
    ory.sh 下的产品
    adoal
        18
    adoal  
       2022-08-04 11:13:00 +08:00
    Apereo CAS ,但是贴合国情的外围功能基本没有,二开的工作量比较多
    YLWIND
        19
    YLWIND  
       2022-08-04 11:57:07 +08:00
    q1angch0u
        20
    q1angch0u  
       2022-08-04 12:33:10 +08:00 via iPhone
    @QuinceyWu openldap
    Ayanokouji
        21
    Ayanokouji  
       2022-08-04 12:44:30 +08:00
    spring authorization server ?
    kappa
        22
    kappa  
       2022-08-04 12:55:05 +08:00
    对于 casbin 的印象只有定期在各大站点发推广文,另一个类似操作的也是国人作品 go-zero
    HAWCat
        23
    HAWCat  
       2022-08-04 13:47:48 +08:00
    @lingly02 目前没有 SMS 实现,不过可以先暂时用 Duo Mobile 来配合使用吧,这个可以推送登录请求
    ohoh
        24
    ohoh  
       2022-08-04 14:56:53 +08:00
    keycloak
    FakerLeung
        25
    FakerLeung  
       2022-08-04 15:22:33 +08:00
    好奇,像接入了这种统一认证,那么每个 App 怎么去验证是否登录呢?那还需要存 user 的什么信息呢?
    ck65
        26
    ck65  
       2022-08-04 15:47:36 +08:00 via iPhone
    Keycloak 很稳
    ackfin01
        27
    ackfin01  
       2022-08-04 15:56:11 +08:00
    @FakerLeung 应用肯定要存用户信息啊 只不过认证都是在 sso 系统
    FakerLeung
        28
    FakerLeung  
       2022-08-04 17:28:31 +08:00
    @ackfin01 #27
    能讲下具体点的流程吗?还是不太懂。😂
    demonzoo
        29
    demonzoo  
       2022-08-04 17:39:10 +08:00
    @ackfin01 不,理想情况下是应用并不需要存用户信息,所有跟用户相关的信息都是从 identity provider 那边拿到的。这样才能方便的做到应用间的信息共享,解决信息孤岛问题
    logto
        30
    logto  
       2022-08-04 17:51:43 +08:00
    @lingly02 #14
    @lovepocky #16
    感谢两位关注。LDAP 已经在我们的 roadmap 里啦: https://github.com/orgs/logto-io/projects/5
    如果大家感兴趣(等不及),也欢迎贡献 LDAP connector 哈。我们也有相关教程: https://docs.logto.io/zh-cn/docs/recipes/create-your-connector/
    clickhouse
        31
    clickhouse  
       2022-08-04 17:52:37 +08:00
    Keycloak+1
    realpg
        32
    realpg  
       2022-08-04 18:09:22 +08:00
    @Oktfolio #11
    .gitignore 都没写么
    Aloento
        33
    Aloento  
       2022-08-04 18:32:28 +08:00
    identityserver 很推荐,我自己也在用
    Aloento
        34
    Aloento  
       2022-08-04 18:34:06 +08:00
    @logto 用 JS 写的吗,真的大丈夫?
    C603H6r18Q1mSP9N
        35
    C603H6r18Q1mSP9N  
       2022-08-04 19:23:11 +08:00
    @logto 好赞,请问 vue 可以适配 uniapp 吗?
    qfdk
        36
    qfdk  
       2022-08-04 19:45:04 +08:00 via iPhone
    自己写过一 js 的 不知道有兴趣么
    Casbin
        37
    Casbin  
       2022-08-04 19:46:33 +08:00
    @lingly02 你好,

    1. 由于功能特性、性能方面的原因,现在需要修改多个位置代码,未来会考虑如何简化 SMS 提供商的开发
    2. Casdoor 本身设计不依赖太多 SQL 提供的功能,方便未来扩展非 SQL 的支持,所以目前没有使用外键请见谅,未来有可能加入
    3. 层次结构未来会添加
    idblife
        38
    idblife  
       2022-08-04 21:15:50 +08:00
    keycloak
    demonzoo
        39
    demonzoo  
       2022-08-04 21:35:40 +08:00
    @Aloento Logto OIDC 的实现是 node.js 代码,运行在 server 端,我没觉得 js 语言本身有什么问题
    wangxiaoaer
        40
    wangxiaoaer  
       2022-08-04 22:35:52 +08:00
    @logto #30 看了下,挺不错,但似乎暂不支持每个应用定制图标、设置不同的连接器?
    windyboy
        41
    windyboy  
       2022-08-04 23:08:39 +08:00   ❤️ 1
    waltcow
        42
    waltcow  
       2022-08-05 10:55:13 +08:00
    @Casbin 用了一段时间来反馈一下
    1. 代码质量非常堪忧,简单的 typo 我都发现了两处了 https://github.com/casdoor/casdoor/pulls?q=typo
    2. sql 数据模型极不合理,组合主键为业务代理很多不必要的麻烦
    logto
        43
    logto  
       2022-08-05 13:44:59 +08:00
    @Aloento #34 请问使用 Node.js 的话会有什么问题呢,愿闻其详
    @shanghai1998 #35 这个我们还没尝试过哈。如果你在使用过程中遇到问题的话欢迎随时和我们联系~
    @wangxiaoaer #40 嗯嗯,目前技术层面是支持的,就是还没有产品化,我们还在研究当中。欢迎加入 discord ,我们会随时 post 新动态~
    wangxiaoaer
        44
    wangxiaoaer  
       2022-08-05 14:40:20 +08:00
    @logto 问题反馈是以 github issue 为主吗?
    logto
        45
    logto  
       2022-08-05 14:46:30 +08:00
    @wangxiaoaer #44 discussion, issues, discord 都可以的哈。我们就不占用 OP 的帖子了~
    lingly02
        46
    lingly02  
    OP
       2022-08-05 16:48:13 +08:00
    @Casbin 感谢回作者回复,希望 casdoor 能越来越完善,毕竟 casbin 这一套权限管理框架的理念还是很不错的。
    PS:很多开源项目一开始的实现也不是很优雅,后面随着逐渐的重构就越来越好。
    Aloento
        47
    Aloento  
       2022-08-05 18:28:38 +08:00
    @logto 鄙人不才,只是如果我自己做相关产品的话不会使用 JS ,您就当我在瞎扯就好
    wely
        48
    wely  
       2022-08-16 11:37:34 +08:00
    ArkID 应该能满足你的需求, 可以看看
    sekfung
        49
    sekfung  
       2022-09-24 13:04:28 +08:00
    @waltcow 真的不能再同意了。我用的时间也比较长了,代码质量真的非常堪忧,现在社区维护的主力还是一群大学生。发版速度简直令人发指,而且经常有数据库字段不兼容的变动,还不能随便升级,动不动就要手动改数据库,前端后端 typo ,硬编码的地方随处可见,错误随便定义,返回给前端根本做不了国际化,这一点真的无法忍受,防暴力破解也没有,扩展性极差,大量的 if else 。除非是个人随便玩玩,否则不建议在生产环境部署
    waltcow
        50
    waltcow  
       2022-09-26 09:38:19 +08:00
    @logto nodejs 和 CloudNative 貌似有点格格不入的样子
    waltcow
        51
    waltcow  
       2022-09-26 09:46:36 +08:00
    @sekfung 前端 控制台 和 sso 登录用的 web 竟然不做入口区分,前端加载慢的不行。 这东西感觉就是毕设玩具一样,哪有人敢拿来商用。
    logto
        52
    logto  
       2022-09-26 12:45:56 +08:00
    @waltcow #50 愿闻其详
    waltcow
        53
    waltcow  
       2022-09-26 14:42:43 +08:00
    @logto 也用了一段时间的 beta 版本,说一下感受吧

    1. 代码很多 ts 的高级用法,在我看来感觉为了单纯满足类型检查而耗费的时间比业务逻辑还要多
    2. 分了很多 packages ,在工程管理依赖上新手入门可能遇到比较多的问题
    3. 在生产环境中使用没有多机部署的方案,在保证可用性上没有太多的保障


    优点:
    1. 社区还是比较热情的,一些疑问 /bug/feature 都会有人在 issue/discord 中回答
    2. all in js , 对于前端想跨界搞全栈开源的人来说提供了工程化实践的 best practise
    sekfung
        54
    sekfung  
       2022-09-26 20:32:51 +08:00 via iPhone
    @waltcow 唉 一开始没仔细调研 加上一波轰炸的宣传 对他印象比较深刻 我们一开始用 keycloak 的 后来觉得太重了而且本土化也不够好 casdoor 一开始用得挺好的 开箱即用 但是要二开的时候 简直痛不欲生 刚推倒完 api 和错误返回 返回的 api 数据格式都没有完全统一的 总的来说 国内有开源的 sso 方案还是挺好的 我也支持开源 casdoor 适合那些开箱即用的用户吧 要二开的话慎重再慎重
    logto
        55
    logto  
       2022-09-27 12:58:46 +08:00
    @waltcow #53 谢谢您的肯定!
    回应一下感受:
    1. 类型都是开发过程中的一些约束,为了更好的代码质量。我们在类型上花的时间并不算多哈,基本都是顺手写上了。
    2. 我们用的是通用的 monorepo 的实践,之前写过一篇文章 https://www.v2ex.com/t/871408 有兴趣可以看看。
    3. 提供 HA 相关的配置文件在我们的 roadmap 里面了,也有社区的小伙伴自己成功部署了,可以交流交流~


    @sekfung #54 可以试试我们的产品,有问题欢迎随时沟通 :-)
    waltcow
        56
    waltcow  
       2022-09-28 14:46:40 +08:00
    @sekfung https://github.com/zitadel/zitadel 最近看了下这个,一些国内平台的 connector 可能暂时还没有,如果二开定制难度应该还好,代码扫了下质量相当 OK
    sekfung
        57
    sekfung  
       2022-10-03 22:35:34 +08:00
    @waltcow 这我之前看过,好像不支持 mysql...连 PG 都是 beta 阶段...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2862 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 12:33 · PVG 20:33 · LAX 04:33 · JFK 07:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.