聊聊一个差点被放弃的项目以及近期的开源计划
前言
自从 StarBlog 和 SiteDirectory 之后,我还没写新的关于开源项目的系列,最近又积累了很多想法,正好写一篇博客来总结一下。
关于差点被放弃的项目,就是最近一直在做的单点认证(IdentityServerLite)
IdentityServerLite
开发这个项目的起因,是团队的内部系统逐渐多了起来
实际上之前也有一个“单点认证”,不过非常简陋,甚至没有应用管理功能,多个系统都共用相同的 token ,然后在每个系统里去判断用户权限,非常不优雅也不安全。
去年底就开始计划这个单点认证项目
起初做了一些技术选型和调研,本来打算在 C# 生态里选择的,不过 C# 生态里的单点认证项目实在是少,开源的比较完善的也就 IdentityServer4 了,但这个项目已经停在了 .Net6 版本,现在这个团队已经转向商业版的开发。
IdentityServer4 我试用了一段时间,感觉功能很完善很重,不过实在是复杂,要在此基础上二次开发,增加我们需要的功能,成本不低。
接着又看了同样是 C# 生态新出的 OpenIddict ,这个相比起 Ids4 更像是一个实现了 OpenID Connect 协议的库,而不是一套单点认证方案。
既然 C# 生态不行,那我又把目光转向了其他技术栈,试用了基于 go 的 casdoor 和基于 Java 的 Keycloak ,感觉都不太符合,前者的代码有点乱,而且用起来发现有一些 bug ,要在此基础上开发的话心好累;后者还是那个问题,太复杂。
就这样,我最终打算自己开发了,接下来我花时间把 OAuth2.0 和 OpenID Connect 学了一下,又看了 IdentityServer 的部分代码,然后就在此基础上开始了单点认证项目的开发,在当时,我把这个项目命名为 IdentityServerLite,顾名思义就是轻量级的 IdentityServer
相关的技术栈是:
- 后端 - AspNetCore, MediatR, AutoMapper, RateLimit 等(可能还有一些一时想不起来的技术,后面有空会单独写文章介绍这个项目)
- 前端 - Next.js, Tailwind CSS, AntDesign
当开始开发之后,才发现困难重重,单点认证系统远比我想象的复杂,当然这跟我在当时对 OAuth2.0 的理解不足也有关系,而且还要接入多种外部登录方式,也给项目带来了额外的复杂性。
所以说这个项目差点就被我放弃了,我差点就想转而使用现成的单点认证方案了,不过好在后面坚持下来,并把这个项目完成了,不过代码也写得很乱就是了。
后面我会找时间重构一下,并作为开源项目发布,新的名字我也想好了,延续 StarBlog 的风格,就叫 StarSSO 好了~
扩展
另外,我后面又发现了基于 C# 的还有另一个单点认证项目,以及其他生态的项目,这里列举一下:
- C# - SimpleIdServer - https://github.com/simpleidserver/SimpleIdServer
- NodeJS - loginto - https://github.com/logto-io/logto
一些其他想法
接下来是一些其他的想法,后续有时间就会付诸实践
- EchoSubs - 视频字幕识别、翻译服务
- SnapMix - 随机图片接口服务
- AIHub 2.0 - AIHub 的升级版
- StarBlogHub - 实现一个去中心化的博客聚合平台,不同的个人博客都可以接入,共享流量
- AppGalaxy - 自建的应用分发平台,类似蒲公英这样
EchoSubs
之前用过一个自动对视频提取字幕并翻译的工具,是基于 OpenAI 的 whisper 模型实现的,感觉还不错,这对于看生肉(没有翻译的番剧)和网课很有用,不过那个工具是使用 PyQT 做的,并不能实现自动化操作
我想做一个服务,提供接口,用户把音频上传到 OSS,然后在 celery 里创建个任务,使用 whisper 模型去语音转文字(刚好有空闲的硬件可以用),接着再调用接口翻译。
目前已经完成了核心的 whisper 字幕识别和翻译部分,接下来写个接口,再加入 celery 和 OSS 就完事了。
SnapMix
这个是随机图片接口服务
我的 StarBlog 之前就有这个功能
不过我想博客还是更纯粹一点好
而且我想把这个随机图片的功能做得更丰富一些
比如可以支持用户注册,然后每个用户可以创建不同的相册,和不同的应用;
每个应用可以关联多个相册,这些相册有系统里公开的共享相册,也有自己的私有相册;
然后使用的时候,根据 appid 和 secret 去请求随机图片就好了
而且我还打算加入 AI 功能,可以用多模态模型对图片进行描述、识别图片的人类、对图片自动分类;
检查相似的图片,优化存储空间等。
PS:事实上最后的相似图片查找,我去年就用 C# 实现了,使用了比较简单的感知哈希和直方图方法,并且我当时是打算使用 Avalonia 来做 GUI ,不过后续搁置了,类 WPF 的开发还是难了点,后续我用 Blazor Hybrid 来做吧~
目前这个项目的技术选型,以及初版已经完成(毕竟 StarBlog 里就有这些功能)
一开始分别用 go、python、C# 都实现了一版,最后发现还是 C# 的性能高一些。
小结
其他的项目不想赘述太多了
毕竟都还没开始做
就水到这吧~ hhh