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