在asp.net core2.1中添加中间件以扩展Swashbuckle.AspNetCore3.0支持简单的文档访问权限控制...
Swashbuckle.AspNetCore3.0 介紹
一個(gè)使用 ASP.NET Core 構(gòu)建的 API 的 Swagger 工具。直接從您的路由,控制器和模型生成漂亮的 API 文檔,包括用于探索和測(cè)試操作的 UI。
項(xiàng)目主頁:https://github.com/domaindrivendev/Swashbuckle.AspNetCore
劃重點(diǎn),使用多看看 Readme,然后看下項(xiàng)目官方示例,遇到問題找找 issues
繼上篇Swashbuckle.AspNetCore3.0 的二次封裝與使用分享了二次封裝的代碼,本篇將分享如何給文檔添加一個(gè)登錄頁,控制文檔的訪問權(quán)限(文末附完整 Demo)
關(guān)于生產(chǎn)環(huán)境接口文檔的顯示
在此之前的接口項(xiàng)目中,若使用了 Swashbuckle.AspNetCore,都是控制其只在開發(fā)環(huán)境使用,不會(huì)就這樣將其發(fā)布到生產(chǎn)環(huán)境(安全第一) 。
那么,怎么安全的發(fā)布 swagger 呢?我有兩種想法
將路由前綴改得超級(jí)復(fù)雜
添加一個(gè)攔截器控制 swagger 文檔的訪問必須獲得授權(quán)(登錄)
大佬若有更好的想法,還望指點(diǎn)一二
下面我將介紹基于 asp.net core2.1 且使用了 Swashbuckle.AspNetCore3.0 的項(xiàng)目種是怎么去實(shí)現(xiàn)安全校驗(yàn)的
通過本篇文章之后,可以放心的將項(xiàng)目中的 swagger 文檔發(fā)布到生產(chǎn)環(huán)境,并使其可通過用戶名密碼去登錄訪問,得以安全且方便的測(cè)試接口。
實(shí)現(xiàn)思路
前面已經(jīng)說到,需要一個(gè)攔截器,而這個(gè)攔截器還需要是全局的,在 asp.net core 中,自然就需要用到的是中間件了
步驟如下,在 UseSwagger 之前使用自定義的中間件
攔截所有 swagger 相關(guān)請(qǐng)求,判斷是否授權(quán)登錄
若未登錄則跳轉(zhuǎn)到授權(quán)登錄頁,登錄后即可訪問 swagger 的資源
如果項(xiàng)目本身有登錄系統(tǒng),可在自定義中間件中使用項(xiàng)目中的登錄,
沒有的話,我會(huì)分享一個(gè)簡單的用戶密碼登錄的方案
Demo 如下圖所示
為使用 Swashbuckle.AspNetCore3 的項(xiàng)目添加接口文檔登錄功能
在寫此功能之前,已經(jīng)封裝了一部分代碼,此功能算是在此之前的代碼封裝的一部分,不過是后面完成的。文中代碼刪除了耦合,和 demo 中會(huì)有一點(diǎn)差異。
定義模型存放用戶密碼
加密方法(HMACSHA256)
自定義中間件
此中間件中有使用的 login.html,其屬性均為內(nèi)嵌資源,故事用 GetManifestResourceStream 讀取文件流并輸出,這樣可以方便的將其進(jìn)行封裝到獨(dú)立的類庫中,而不與輸出項(xiàng)目耦合
關(guān)于退出按鈕,可以參考前文自定義 index.html
index.html 添加退出按鈕
自定義 index.html 文檔
默認(rèn) index.html
自定義的 index.html,login.html
注意:需要將其改為內(nèi)嵌資源(屬性->生成操作->嵌入的資源)
點(diǎn)此查看 index.html
點(diǎn)此查看 login.html
完整 Demo 下載
Github 預(yù)覽?
原文地址:?https://www.cnblogs.com/morang/p/9741511.html
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號(hào)文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的在asp.net core2.1中添加中间件以扩展Swashbuckle.AspNetCore3.0支持简单的文档访问权限控制...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在.NET Core控制台程序中使用
- 下一篇: .NET微服务调查结果