前言
自從 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