JA Plus 故事
程序员的故事如此简略之绕不过来的开源情结
咱们筹备做一件平凡的事,也能够说是一件真真正正普惠的事。
絮
是的,你没有看错,就是“絮”而非“序”,请容许我絮叨二三。
咱们行将要做的,咱们认为是一件平凡的事,也能够说是一件真真正正普惠的事。咱们要开发一款真真正正国产的并且将来将会走向国内的齐全开源的产品 – Just Auth Plus(以下简称“JAP”)。
JAP 是 JustAuth(以下简称“JA”)的升级版。
立项之初,我和我的合伙人之间曾有过强烈的意识层面的碰撞,碰撞的本源就在于开源和商业化之间的根本矛盾。开源如何盈利?不商业化的话,咱们如何放弃饥寒?就算开源了,怎么确保能吸引足够多的优良的开发者参加共创?
因为咱们都是技术出身,也都是热衷于开源事业的技术人,也都对开源有着发自内心的激情,所以,不论多少次的碰撞、争吵,最初都斗争到了这份情结之上。
- JAP 口号:Just auth for any app!
- JAP 指标:让身份链接无处可藏(干掉传统 Login 模块简单的逻辑!)
- JAP 价值:不便开发者无缝对接任何第三方利用或者自有零碎,进步开发效率,缩小代码保护老本
- JAP 愿景:以开源的形式,受惠于开源社区,赋能于开发者。使之成为开发者生态内必不可少的“基础设施”,以期造成新的技术标准。
一、源于此(JA 的起源)
说起 JustAuth 的起源其实很简略,除了源于对技术的酷爱,另外一个重要起因就是因为技术人的“懒”。
从 16 年起,我开始本人开发博客零碎,并且集成了 QQ 和微博两个第三方平台的登录性能,在集成其 SDK 时,费了好大功夫去钻研源码、查阅文档、测试 API。最苦恼的就是,因为每个平台的 SDK 规定不统一,所以,同样的性能,必须复制 N 个版本,而后去适配,最终导致的后果就是我的项目中多出了一大堆冗余的代码。如下:
这是过后集成 QQ 和微博的实现代码。其实,接触的平台多了,自会发现一些问题:
- 各个平台间互相割裂(硬伤,无奈防止)
- 各个平台的 SDK(局部平台并没有现成的 SDK 可供使用)代码宏大、简单
- 各个平台的 API 比拟繁冗
- 国外网站的 API 文档浏览艰难
这能够说也算是一个契机。
到了 18 年,过后 QQ 群里除了站长外,还有一些开发者,应这些敌人的要求,我开源了本人的第一个博客零碎 OneBlog,随着使用者的减少,以及用户的需要,我筹备从新接入第三方登录性能。
然而鉴于之前接入第三方登录时的“暗影”,我也因而萌发了要开发一款 开箱即用的 Oauth 登录工具包。这也正是起初 JustAuth“诞生”的最大起因。归根结底,还是因为一个“懒”,因为我不想消耗过多的精力去每个平台翻阅文档,一遍又一遍的复制同样的代码,一遍又一遍的重写同一个性能,最次要的是我晓得肯定会有很多人碰到了和我一样的问题。
二、行于此(JA 的倒退)
JustAuth 自开源起,就备受宽广开发者的关注,这一点也是我很快慰的,因为我晓得,我开源的这个工具,起码不是一个“废材”。
细数 JustAuth 的迭代之路,到目前为止,已公布到了 v1.15.9 版本,回顾这一年多的途程,的确有一些须要记录的点。
- 2019-01-31 提交了第一行代码
- 2019-03-25 公布了 v1.0.0,当天就被收录到码云举荐我的项目名单中,一周内都位列日排行榜和周排行榜第一名
- 2019-03-27 正式公布 v1.0.1 版本到 maven 地方仓库
- 2019-05-20 第一位贡献者 xkcoding 退出
- 2019-06-20 公布 v1.7.0 版本,重构了局部代码,jar 包由原来的 130+kb 优化到 110+kb(by xkcoding)
- 2019-06-29 公布 v1.8.0 版本,这一版算是分水岭。批改 login 办法的参数为 AuthCallback,封装回调返回的参数,同时减少 code 和 state 参数校验,预防 CSRF,v1.8.0 之前的版本中是没有 state 这一概念的。
- 2019-07-16 第二位贡献者 pengisgood 退出
- 2019-07-18 如梦技术的大佬春哥入群,前期好多需要和想法都有春哥的倡议。春哥是 Spring Cloud 微服务开发外围 mica 的作者,同时像 avue、Pigx、bladex 等我的项目多多少少都有春哥的助力。
- 2019-07-19 公布 v1.9.0 版本,解决 v1.8.0 暗藏的大 bug,重构局部代码,优化代码构造,缩小编译后的代码量
- 2019-07-21 JustAuth 正式喜提码云【GVP】名称
- 2019-07-30 公布 v1.9.3 版本,扩大 state 缓存实现
- 2019-08-06 公布 v1.10.0 版本,简略封装极简版的针对 JustAuth 的 Log 工具类,去掉 slf4j 依赖。这一版开始反对开发者自定义 state 缓存插件(Redis、Memcache 等)
- 2019-09-04 公布 justauth-spring-boot-starter,全面反对 SpringBoot 疾速集成(by xkcoding)
- 2019-09-17 公布 v1.12.0 版本,增加 Nutzboot 版的 demo,正式反对由用户自定义扩大第三方受权登录。
- 2020-03-17 公布 v1.14.0 版本,集成 simple-http,解放 hutool-http 强依赖,具体的 HttpUtil 实现,由用户本人去抉择,JustAuth 不再强制干涉用户对 http 工具的选择权
- 2020-06-24 公布 v1.15.5 版本,集成阿里云平台;登录胜利后返回第三方用户原始数据
- 2020-06-30 公布 v1.15.6 版本,迁徙“帮忙文档”到独立网站 https://justauth.wiki,减少疏忽校验 state 的性能
- 2020-09-11 公布 v1.15.7 版本,降级 Github Access Token 验证形式;JA 正式反对自定义 scope 参数,使 JA 的利用场景更广,而不仅仅是登录
- 2020-10-25 公布 v1.15.8 版本,降级 simple-http 版本 from 1.0.2 to 1.0.3, 修复 jdk11 的 httpclient 应用默认超时工夫的问题
- 2021-01-01 公布 v1.15.9 版本,新增喜马拉雅、飞书、企业微信网页受权平台,降级 facebook api 版本。
到目前(2021/1/19)为止,JA 获得的问题:
- 增长趋势
- 已获 star:gitee(4.5k)、github(9.8k)
- 2019 年 7 月份取得 Gitee GVP 名称
- 2019 年 8 月份 Github 上最热门的 Java 开源我的项目
- 目前收集到的应用用户(蕴含企业、各热门商业我的项目、集体我的项目等):
并且还有很多企业也在应用 JA 实现第三方受权登录,不过因为企业方不不便公开所以并未加到列表中。
- 证书
如果您当初也在应用 JA,并且违心与咱们共享,请提交到如下地址(任选一个):
- https://github.com/justauth/J…
- https://gitee.com/yadong.zhan…
咱们承诺,仅将获取到的信息,用于 JA 官网、我的项目 Readme 文档或者官网举荐文章中,不会用于其余任何非法、违规或者对用户不利的场景中。
三、愿于此(JA 的将来)
Is that all? No, not enough!
JA 能获得目前的问题,全靠各位开发者 / 组织 / 企业 / 社区搭档的反对,咱们也在这儿衷心的感激各位领导、各位朋友以及各位社区内的小伙伴。
尽管 JA 目前的问题算是挺好,但咱们不愿止步于此,不违心让 JA 仅止步于“第三方登录”,咱们想做的更好,因而咱们筹备正式立项“JAP”!
JAP 是什么?
JAP 是一款开源的认证中间件,基于模块化设计,并且与业务高度解耦,应用起来非常灵活,开发者能够毫不费力地将 JAP 集成到任何 web 应用程序中,就像集成 JA 一样,简略不便。
JAP 要做的是为所有须要身份认证的利用提供一套规范的解决方案,集成所有 APP。不便开发者无缝对接任何第三方利用或者自有零碎。
- JAP 口号:Just auth into any app!
- JAP 指标:让身份链接无处可藏
- JAP 价值:不便开发者无缝对接任何第三方利用或者自有零碎,进步开发效率,缩小代码保护老本
- JAP 愿景:以开源的形式,受惠于开源社区,赋能于开发者。使之成为开发者生态内必不可少的“基础设施”,以期造成新的技术标准。
- JAP 开源地址:https://gitee.com/fujieid/jap
JAP 开发背景?
JA 是为了干掉第三方登录,JA Plus 是为了干掉整个登录相干的业务模块。
JAP 有什么特点?
- 单点登录:一处登录,处处通行
- 开箱即用:API 设计趋近于文言,相似并参考 JustAuth
-
多平台:
- 国内外数十家第三方平台(基于 JustAuth)
- OAuth(OIDC)协定的平台,内置国内外常见平台
- SAML 协定的平台,内置国内外常见平台
- 业务解耦:JAP 不深刻具体的业务,只将受权认证方面的性能形象出一套规范的组件,不便任意零碎疾速对接
- 模块化:JAP 基于模块开发,根本做到,用哪种引哪种
- 统一标准:所有内置实现或者自定义的实现,都基于规范的策略
- 多语言反对:Java、Python、Go、Node 等
JAP 有什么性能?
-
集成账号密码登录
- 反对自有零碎账号
- 反对第三方 API 接入
- 集成第三方登录(基于 JA)
-
集成 OAuth 登录(蕴含 OIDC)
- 提供 Server 端服务
- 反对自定义第三方服务
- 集成 LDAP 登录
-
集成 SAML 登录
- 提供 Server 端服务
- 反对自定义第三方服务
- 集成 AD 域登录
- MFA
- 账号退出
- 多语言反对
- …
JAP 实用于哪些场景?
- 新我的项目立项,你们须要研发一套蕴含登录、认证的零碎
- 现有登录模块为自研,然而新一轮的技术布局中,你们想将登录认证模块重构,以更加灵便的架构适应前面的新需要,比方:集成 MFA 登录、集成 OAuth 登录等
- 你们的我的项目太多,每个我的项目都须要登录认证模块,想解决这种重复劳动的问题
- 从久远方面思考,公司或组织或集体须要一套规范的、灵便的、性能全面的登录认证性能
- 你们不想将研发老本放到登录认证这种必须但想做欠缺又须要破费大量工夫老本、人力老本的事件上,心愿有一个中间件能够完满集成登录认证性能,使研发人员有更多的工夫和精力投入到业务开发中,进步研发产能和研发效率
- 你们除了须要对接规范的身份提供商外,还有一些非标准的身份提供商,须要投入研发人员独自定制开发
- 你们企业种用到的开发语言较多,比方:Java、Python、Node 等,每种语言对应的零碎,都要应用不同语言实现雷同的登录认证性能
- 你们须要研发一个反对 OAuth 登录的 Web 应用程序
- 你们想让本人的零碎反对对外提供 OAuth 服务
- 你们须要研发一个反对 SAML 登录的 Web 应用程序,但又苦于 SAML 那宏大而繁琐的业务流程和配置
- 你们想让本人的零碎反对对外提供 SAML 服务
- 你们想研发一个反对 LDAP 登录的程序,但又不晓得如何动手
- 你们感觉传统的账号密码十分软弱,所想让用户应用一次性的手机验证码或邮箱验证码进行登录
- 你们企业心愿联结其现有的企业用户目录,以容许员工应用其现有的企业凭据登录各种外部和第三方应用程序。
- …
JAP 常见问题有哪些?
JAP 不反对具体的业务操作吗?
JAP 针对用户、利用等业务数据,只提供规范的业务接口,不提供数据库层面的反对。JAP 要做的是为宽广开发者提供一套技术标准,既然是规范,那就不能依赖于任何和具体业务相干的逻辑。不论你们的零碎是用的 MySQL、Oracle、SQLlite、Redis、MongoDB 还是其余的,JAP 统统不关怀。JAP 对外提供标准接口,业务端只须要按需实现 JAP 的接口即可,这种设计能在最大水平上减少它的灵活性,使它不受限于某一具体的数据库实现计划。
JAP 能够用到企业级我的项目吗?
当然,JAP 的价值就在于:不便开发者无缝对接任何第三方利用或者自有零碎,进步开发效率,缩小代码保护老本 。所以对于企业来说,这是一个 降本增效 的性能。JAP 基于模块化开发,并且不侵入业务零碎,能够非常不便的集成到企业外部各个系统或者对立的登录认证网关中。
JAP 能够商用吗?
JAP 基于 LGPL 3.0 协定。商用分为以下两种状况:
- LGPL 容许商业软件通过类库援用 (link) 形式应用 而不须要开源商业软件的代码。这使得 采纳 LGPL 协定的开源代码能够被商业软件作为类库援用并公布和销售。
- 如果批改 LGPL 协定的代码或者衍生,则所有批改的代码,波及批改局部的额定代码和衍生的代码都必须采纳 LGPL 协定。因而 LGPL 协定的开源代码 不适宜通过批改和衍生的形式做二次开发的商业软件采纳。
四、咱们须要什么?
咱们的愿景(以开源的形式,受惠于开源社区,赋能于开发者。使之成为开发者生态内必不可少的“基础设施”,以期造成新的技术标准)决定了咱们行将要走的这条路线的艰巨性无疑是微小的。
咱们不仅仅只是想把这款作品推广到国内泛滥开发者、组织和企业用户身边,让他们享受开源带来的便当;咱们还要把这个作品推向更广大的空间,推向国内,让更多的开发者、组织和企业理解并真真正正的应用这个我的项目、受惠于这个我的项目。
既然咱们抉择了开源,抉择了贡献,抉择了这将“一条道走到黑”的路,就须要咱们能始终走上来。但开源的路何其漫长、何其孤单,“路漫漫其修远兮,吾将上下而求索”。
咱们晓得,仅凭咱们本人的力量就想推动这个我的项目发扬光大、普惠开发者还远远不够,咱们也坚信,只有施展团队的力量,集思广益,能力打造出一个真正优良的、真正受欢迎的、真正标榜的能耸立于开源之林的顶尖我的项目!所以咱们 须要寻找一些真挚的、气味相投的、靠谱的合作伙伴和战友。
就像我在之前直播分享 JustAuth 时(前情回顾:由表入里全面介绍 JustAuth)表白过的一个观点一样:和一群气味相投的敌人一起做一件喜爱的事件,是一种幸福。偶合的是,高瓴资本创始人兼首席执行官张磊也提过相似的观点:高瓴资本张磊:找一帮你喜爱的、真正靠谱的人,一起做有意思的事。
是的,咱们筹备做的这所有,都是源于咱们对技术的酷爱,对开源的酷爱,以及对国内开源事业的酷爱。因而,咱们也须要找到和咱们有雷同趣味、喜好、指标的人来一起实现这件有意义的事。
如果你也对 JAP 感兴趣,请将以下信息发给咱们:
- 集体姓名、邮箱(邮箱或者手机二选一)
- 集体开源首页(Gitee 或者 Github)
- 集体的阐明,比方做过哪些开源我的项目或者参加过哪些出名的开源我的项目
发送邮件到:support@fujieid.com
更多详情,请参考链接 JAP 文档核心
五、社区相干
咱们会高标准、高要求咱们的外围社区搭档。如果你想退出到咱们的外围团队中,如果你想参加到 JAP 我的项目社区,请仔细阅读以下内容:
成员要求
所有成员根本要求
- 尊重开源,酷爱开源。尊重是前提,酷爱是目标。
- 团结友善,乐于合作。
- 酷爱技术,擅用技术。
- …
核心成员要求
如果你想成为社区的核心成员,请满足以下条件:
- 需至多有一个开源的 star 数超 1k 的我的项目
- 有过开源社区参加、保护、治理教训
- 对身份认证相干内容有集体成熟的观点、认识或欲望
- …
如何成为核心成员
-
如满足以上条件(核心成员要求),请依照以下格局,发送邮件到咱们的官网邮箱(support@fujieid.com):
- 姓名
- 集体网站(如有)
- 开源我的项目地址(不限于 Github、Gitee、Bitbucket 等)
- 为什么要退出社区外围团队(集体简要阐明)
- 如不满足以上条件,并且仍想退出咱们的外围团队,请简要形容你的集体履历,发送至咱们的官网邮箱:support@fujieid.com
成员福利
根本成员福利
- 享有该共创我的项目的官网提名权。
- 享有官网举办的所有基于该共创我的项目的盈利流动(包含但不限于技术大会、沙龙、企业培训等)的优先参与权和门票(如果有)优惠权。
- …
核心成员福利
- 所有归于该项目标盈利(包含但不限于技术支持、技术服务等),对立依照奉献内容、奉献品质调配。
- 依据奉献内容、奉献品质,永恒享有该共创我的项目的所有“Title”,并且在合理合法合规的前提下能够任意应用该项目标一切权利(署名权等)。
- 官网举办的所有基于该项目标盈利流动(包含但不限于技术大会、沙龙、企业培训等)的收费参与权。
- 与其余核心成员独特享有“社区势力”。
- 享有 北京符节科技有限公司 所有产品优惠权。包含但不限于:收费应用、官网优惠券等。
- …
违规项
- 歹意篡改、删除我的项目代码。
- 歹意扰乱社区。
- 公布谩骂、歧视、怨恨、反政治等舆论。
- 基于该共创我的项目,删除 License 后擅自“二开”(再次开源)。
- 联结其余核心成员,以小帮派的模式行使社区势力以达到本人的目标,毁坏社区的战争性。
- …
社区势力
由核心成员独特领有。
- 享有对该我的项目一般成员(参与者、贡献者)所奉献的代码和文件的表决权(予以对提交申请的批准、回绝等势力)。
- 享有对该我的项目倒退布局的表决权。
- 享有对该我的项目核心成员的罢免权(仅针对违规成员)。
- …
社区规划
-
组建团队(社区)
- 寻找核心成员,需满足下面提到的“核心成员要求”。
-
打造 JAP 品牌
- 编码
- 编码
- 编码
- 开源社区布道
- 寻找资本投资
- 拓宽海内场景
- 实现愿景
- …
更多详情,请参考链接 JAP 文档核心 – 社区相干
JAP 进度
- 2021 年 01 月 12 日建设我的项目(闭源开发):https://gitee.com/fujieid/jap
- 2021 年 01 月 19 日正式开源:https://gitee.com/fujieid/jap
- 开源后 1 小时取得红薯举荐
- 截止 2021 年 01 月 19 日 20 时取得 star 42 个
- 拜访 IP 246 个
开源故事
插播一条音讯,欢送给 JustAuth、OneBlog 等我的项目提交过代码的同学,或者提交过 Issue 的同学投稿 Gitee 的【开源故事】专题,投稿地址:
https://gitee.com/gitee-community/opensource-guide/blob/master/%E5%BC%80%E6%BA%90%E6%95%85%E4%BA%8B/%E6%8A%95%E7%A8%BF%E8%AF%B4%E6%98%8E.md
说给我的支持者
在 JAP 开源进去不久,我就被我的项目评论区的一条留言吸引到:
这位兄弟的一席话,让我很打动。做开源的乐趣大略就在此吧,开源我的项目作者和开发者之间互相成就。
再次感激陪我一路走来的诸位敌人!
JAP 开源地址:https://gitee.com/fujieid/jap