日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

在asp.net core2.1中添加中间件以扩展Swashbuckle.AspNetCore3.0支持简单的文档访问权限控制...

發(fā)布時間:2023/12/4 asp.net 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在asp.net core2.1中添加中间件以扩展Swashbuckle.AspNetCore3.0支持简单的文档访问权限控制... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Swashbuckle.AspNetCore3.0 介紹

一個使用 ASP.NET Core 構(gòu)建的 API 的 Swagger 工具。直接從您的路由,控制器和模型生成漂亮的 API 文檔,包括用于探索和測試操作的 UI。
項(xiàng)目主頁:https://github.com/domaindrivendev/Swashbuckle.AspNetCore
劃重點(diǎn),使用多看看 Readme,然后看下項(xiàng)目官方示例,遇到問題找找 issues
繼上篇Swashbuckle.AspNetCore3.0 的二次封裝與使用分享了二次封裝的代碼,本篇將分享如何給文檔添加一個登錄頁,控制文檔的訪問權(quán)限(文末附完整 Demo)

關(guān)于生產(chǎn)環(huán)境接口文檔的顯示

在此之前的接口項(xiàng)目中,若使用了 Swashbuckle.AspNetCore,都是控制其只在開發(fā)環(huán)境使用,不會就這樣將其發(fā)布到生產(chǎn)環(huán)境(安全第一) 。
那么,怎么安全的發(fā)布 swagger 呢?我有兩種想法

  • 將路由前綴改得超級復(fù)雜

  • 添加一個攔截器控制 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)境,并使其可通過用戶名密碼去登錄訪問,得以安全且方便的測試接口。

實(shí)現(xiàn)思路

前面已經(jīng)說到,需要一個攔截器,而這個攔截器還需要是全局的,在 asp.net core 中,自然就需要用到的是中間件了

步驟如下,在 UseSwagger 之前使用自定義的中間件
攔截所有 swagger 相關(guān)請求,判斷是否授權(quán)登錄
若未登錄則跳轉(zhuǎn)到授權(quán)登錄頁,登錄后即可訪問 swagger 的資源

如果項(xiàng)目本身有登錄系統(tǒng),可在自定義中間件中使用項(xiàng)目中的登錄,
沒有的話,我會分享一個簡單的用戶密碼登錄的方案

Demo 如下圖所示

為使用 Swashbuckle.AspNetCore3 的項(xiàng)目添加接口文檔登錄功能

在寫此功能之前,已經(jīng)封裝了一部分代碼,此功能算是在此之前的代碼封裝的一部分,不過是后面完成的。文中代碼刪除了耦合,和 demo 中會有一點(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

if (configObject.customAuth) { ?var logOutEle = document.createElement('button')logOutEle.className = 'btn 'logOutEle.innerText = '退出'logOutEle.onclick = function() {location.href = configObject.logoutUrl} ?document.getElementsByClassName('topbar-wrapper')[0].appendChild(logOutEle) }

自定義的 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ū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

總結(jié)

以上是生活随笔為你收集整理的在asp.net core2.1中添加中间件以扩展Swashbuckle.AspNetCore3.0支持简单的文档访问权限控制...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。