- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
自从 StarBlog 和 SiteDirectory 之后,我还没写新的关于开源项目的系列,最近又积累了很多想法,正好写一篇博客来总结一下.
关于差点被放弃的项目,就是最近一直在做的单点认证(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 。
相关的技术栈是:
当开始开发之后,才发现困难重重,单点认证系统远比我想象的复杂,当然这跟我在当时对 OAuth2.0 的理解不足也有关系,而且还要接入多种外部登录方式,也给项目带来了额外的复杂性.
所以说这个项目差点就被我放弃了,我差点就想转而使用现成的单点认证方案了,不过好在后面坚持下来,并把这个项目完成了,不过代码也写得很乱就是了.
后面我会找时间重构一下,并作为开源项目发布,新的名字我也想好了,延续 StarBlog 的风格,就叫 StarSSO 好了~ 。
另外,我后面又发现了基于 C# 的还有另一个单点认证项目,以及其他生态的项目,这里列举一下:
接下来是一些其他的想法,后续有时间就会付诸实践 。
之前用过一个自动对视频提取字幕并翻译的工具,是基于 OpenAI 的 whisper 模型实现的,感觉还不错,这对于看生肉(没有翻译的番剧)和网课很有用,不过那个工具是使用 PyQT 做的,并不能实现自动化操作 。
我想做一个服务,提供接口,用户把音频上传到 OSS,然后在 celery 里创建个任务,使用 whisper 模型去语音转文字(刚好有空闲的硬件可以用),接着再调用接口翻译.
目前已经完成了核心的 whisper 字幕识别和翻译部分,接下来写个接口,再加入 celery 和 OSS 就完事了.
这个是随机图片接口服务 。
我的 StarBlog 之前就有这个功能 。
不过我想博客还是更纯粹一点好 。
而且我想把这个随机图片的功能做得更丰富一些 。
比如可以支持用户注册,然后每个用户可以创建不同的相册,和不同的应用; 。
每个应用可以关联多个相册,这些相册有系统里公开的共享相册,也有自己的私有相册; 。
然后使用的时候,根据 appid 和 secret 去请求随机图片就好了 。
而且我还打算加入 AI 功能,可以用多模态模型对图片进行描述、识别图片的人类、对图片自动分类; 。
检查相似的图片,优化存储空间等.
PS:事实上最后的相似图片查找,我去年就用 C# 实现了,使用了比较简单的感知哈希和直方图方法,并且我当时是打算使用 Avalonia 来做 GUI ,不过后续搁置了,类 WPF 的开发还是难了点,后续我用 Blazor Hybrid 来做吧~ 。
目前这个项目的技术选型,以及初版已经完成(毕竟 StarBlog 里就有这些功能) 。
一开始分别用 go、python、C# 都实现了一版,最后发现还是 C# 的性能高一些.
其他的项目不想赘述太多了 。
毕竟都还没开始做 。
就水到这吧~ hhh 。
最后此篇关于聊聊一个差点被放弃的项目以及近期的开源计划的文章就讲到这里了,如果你想了解更多关于聊聊一个差点被放弃的项目以及近期的开源计划的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
给定 var obj = {}; var _a = 1; obj._a = 1; obj.aGetter = function() { return _a; } obj.aSetter = fun
我是一名优秀的程序员,十分优秀!