一款基于.NET Core的认证授权解决方案-葫芦藤1.0开源啦
背景
18年公司準(zhǔn)備在技術(shù)上進(jìn)行轉(zhuǎn)型,而公司技術(shù)團(tuán)隊(duì)是互相獨(dú)立的,新技術(shù)的推動阻力很大。我們需要找到一個切入點(diǎn)。公司的項(xiàng)目很多,而各個系統(tǒng)之間又不互通,導(dǎo)致每套系統(tǒng)都有一套登錄體系,給員工和客戶都帶來極大的不便。那么從登錄切入進(jìn)去無疑最合適,對于各個團(tuán)隊(duì)的技術(shù)改造成本也不大。所以我們團(tuán)隊(duì)第一個項(xiàng)目就是搭建一套統(tǒng)一登錄認(rèn)證授權(quán)系統(tǒng),那么葫蘆藤項(xiàng)目應(yīng)運(yùn)而生。
技術(shù)方案
后端框架:.NET Core3.1(后期會推出 .NET 5版本)
前端框架:React
數(shù)據(jù)庫:mysql(可根據(jù)實(shí)際情況,自由切換)
中間件:redis
詳細(xì)功能
認(rèn)證授權(quán)服務(wù)
基于IdentityServer4實(shí)現(xiàn)的協(xié)議,支持網(wǎng)站、本地應(yīng)用、移動端、web服務(wù)等應(yīng)用的認(rèn)證授權(quán)邏輯。
單點(diǎn)登錄登出
支持各種類型應(yīng)用上的單點(diǎn)登錄登出。開箱即用的基礎(chǔ)用戶管理模塊,包括:注冊、登錄、手機(jī)驗(yàn)證碼、忘記密碼等。為了安全考慮,集成了騰訊圖形驗(yàn)證碼。
第三方登錄(微信、釘釘)
完善的第三方登錄支持。支持首次登錄時(shí)綁定已存在用戶或注冊新用戶后,自動綁定。
如何快速使用
1.下載代碼
clone代碼到本地。根目錄結(jié)構(gòu)如下:
其中,backend存放的是后端代碼,frontend存放的是前端代碼。
進(jìn)入backend目錄,使用Visual Studio打開解決方案。目錄結(jié)構(gòu)如下:
2.生成數(shù)據(jù)庫
首先在Fulu.Passport.Web中找到appsettings.Development.json文件。編輯數(shù)據(jù)庫連接字符串:
打開程序包管理器,切換默認(rèn)項(xiàng)目為:Fulu.Passport.Web, 如下圖所示:
然后在程序包管理器中執(zhí)行如下命令:
Add-Migration Init最后執(zhí)行完成后,再執(zhí)行如下命令:
update-database執(zhí)行完以上操作后,如沒有報(bào)錯,則會創(chuàng)建數(shù)據(jù)庫,并會在Client表中創(chuàng)建一條測試數(shù)據(jù),如下圖所示:
3.按F5啟動后端服務(wù)
注:由于項(xiàng)目中依賴redis來處理緩存,所以正式啟動之前,需要將appsettings.Development.json文件里的redis配置改為你自己的。
4.啟動前端
切換目錄到frontend,在命令行中執(zhí)行如下命令:
npm install執(zhí)行完畢后,執(zhí)行如下命令:
npm run demo執(zhí)行結(jié)果如下圖所示:
然后通過http://localhost:8080進(jìn)行訪問。界面如下所示:
至此,前后端服務(wù)已啟動完畢,一個開箱即用的認(rèn)證授權(quán)服務(wù)就完成了。
5.新客戶端如何快速接入認(rèn)證服務(wù)?
認(rèn)證授權(quán)服務(wù)存在的意義就是提供統(tǒng)一的認(rèn)證授權(quán)入口,有了這個服務(wù)后,每個新的客戶端應(yīng)用無需單獨(dú)開發(fā)認(rèn)證授權(quán)模塊。下面就來一起看下如何快速將新應(yīng)用接入到認(rèn)證授權(quán)服務(wù)。(此處以 ASP.NET Core作為示例,其他語言大同小異)。
示例代碼在sample文件夾中,如下圖所示:
在正式接入之前,必須先申請應(yīng)用。(此版本未提供應(yīng)用管理服務(wù))通過在數(shù)據(jù)庫中添加示例信息,如下圖所示:
示例sql腳本:
INSERT INTO `fulusso`.`client`(`client_secret`, `full_name`, `host_url`, `redirect_uri`, `description`, `enabled`, `id`) VALUES ('14p9ao1gxu4q3sp8ogk8bq4gkct59t9w', '葫蘆藤2', 'http://localhost:5003/', 'http://localhost:5003', NULL, 1, UUID());其中,redirect_uri參數(shù)指的是從認(rèn)證服務(wù)獲取code之后,重定向的url。為了開發(fā)的方便,我們的認(rèn)證服務(wù)中僅校驗(yàn)回調(diào)域名的域名,不會校驗(yàn)完整的地址。比如,你的redirect_uri為http://www.xxx.com/abc/aaa,則數(shù)據(jù)庫中的redirect_uri字段填寫http://www.xxx.com即可。
應(yīng)用信息導(dǎo)入到數(shù)據(jù)庫后,在Startup類的ConfigureServices方法中,添加如下代碼:
services.AddServiceAuthorize(o =>{o.AllowClientToken = true;o.AllowUserToken = true;o.OnClientValidate = false;o.Authority = "http://localhost:5000";o.ValidateAudience = false;o.ClientId = Configuration["AppSettings:ClientId"];o.ClientSecret = Configuration["AppSettings:ClientSecret"];});注:需添加Fulu.Service.Authorize項(xiàng)目引用,如下圖所示:
然后在Configure方法中,添加如下代碼:
app.UseRouting();app.UseJwtAuthorize();app.UseAuthorization();其中,UseJwtAuthorize是自定義的中間件,為了實(shí)現(xiàn)OAuth2.0的授權(quán)碼的邏輯。
限于篇幅,具體代碼不在此列出。可在代碼倉庫中查看。
到此為止,這個新應(yīng)用就成功的接入到認(rèn)證服務(wù)了。
當(dāng)未登錄的時(shí)候,訪問此應(yīng)用的頁面會自動跳轉(zhuǎn)到認(rèn)證服務(wù)的login界面。登錄之后,會重定向回登錄之前的頁面。如下圖所示:
下一版功能規(guī)劃
1.更多的第三方平臺的接入(QQ、微博等)
2.api授權(quán)服務(wù)
3.更安全的二次驗(yàn)證,集成google令牌
4.應(yīng)用管理
等等~~~~,盡請期待。
體驗(yàn)
演示地址:https://account.suuyuu.cn/
代碼倉庫:https://github.com/fuluteam/fulusso
如果覺得項(xiàng)目對于有所幫助,歡迎star。您的支持是我們持續(xù)更新的動力。
總結(jié)
以上是生活随笔為你收集整理的一款基于.NET Core的认证授权解决方案-葫芦藤1.0开源啦的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 寻找性能更优秀的不可变小字典
- 下一篇: .NET架构小技巧(8)——优待异常