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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【.NET Core项目实战-统一认证平台】第六章 网关篇-自定义客户端授权

發(fā)布時間:2023/12/4 asp.net 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【.NET Core项目实战-统一认证平台】第六章 网关篇-自定义客户端授权 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

上篇文章【.NET Core項目實戰(zhàn)-統(tǒng)一認證平臺】第五章 網關篇-自定義緩存Redis?我們介紹了網關使用Redis進行緩存,并介紹了如何進行緩存實現(xiàn),緩存信息清理接口的使用。本篇我們將介紹如何實現(xiàn)網關自定義客戶端授權,實現(xiàn)可以為不同的接入客戶端設置不同的訪問權限。

.netcore項目實戰(zhàn)交流群(637326624),有興趣的朋友可以在群里交流討論。

一、功能描述

網關重點功能之一鑒權,需要實現(xiàn)對不同的客戶端進行授權訪問,禁止訪問未經授權的路由地址,且需要對無權訪問的請求,返回通用的格式。
比如網關有1-10個可用路由,客戶端A只能訪問1-5,客戶端B只能訪問6-10,這時我們就無法通過Ocelot配置授權來進行自定義認證,這塊就需要我們增加自定義的認證管道來實現(xiàn)功能,盡量不影響網關已有的功能。

下面我們就該功能如何實現(xiàn)展開講解,希望大家先理解下功能需求,然后在延伸到具體實現(xiàn)。

二、數(shù)據(jù)庫設計

我在第三章 網關篇-數(shù)據(jù)庫存儲配置(1)中講解了我們網關配置信息設計,本篇將在那個基礎上增加客戶端認證需要用到的表的相關設計,設計客戶端授權結構如下。其中客戶端使用的IdentityServer4客戶端表結構。

設計好概念模型后,我們生成物理模型,然后生成數(shù)據(jù)庫腳本。

設計思想為可以添加自定義的授權組,為每一個授權分配能夠訪問的路由,然后為網關授權的客戶端分配一個或多個授權組,每次客戶端請求時,如果路由設置了授權訪問,就校驗客戶端是否存在路由訪問權限,如果無訪問權限,直接返回401未授權提醒。

感覺是不是很簡單呢?有了這個自定義的客戶端認證,那么我們后端服務可以專注于自己的業(yè)務邏輯而無需再過多了進行權限處理了。

三、功能實現(xiàn)

1、功能開啟配置

網關應該支持自定義客戶端授權中間件是否啟用,因為一些小型項目是不需要對每個客戶端進行單獨授權的,中型和大型項目才有可能遇到自定義配置情況,所以我們需要在配置文件增加配置選項。在AhphOcelotConfiguration.cs配置類中增加屬性,默認不開啟,而且需要知道客戶端標識名稱。

那我們如何把自定義的授權增加到網關流程里呢?這塊我們就需要訂制自己的授權中間件。

2、實現(xiàn)客戶端授權中間件

首先我們定義一個自定義授權中間件AhphAuthenticationMiddleware,需要繼承OcelotMiddleware,然后我們要實現(xiàn)Invoke方法,詳細代碼如下。

有了這個中間件,那么如何添加到Ocelot的管道里呢?這里就需要查看Ocelot源代碼了,看是如何實現(xiàn)管道調用的,OcelotMiddlewareExtensions實現(xiàn)管道部分如下,BuildOcelotPipeline里具體的流程。其實我在之前的Ocelot源碼解讀里也講解過原理了,奈斯,既然找到了,那么我們就加入我們自定義的授權中間件即可。

添加使用自定義授權中間件擴展AhphAuthenticationMiddlewareExtensions,代碼如下。

有了這個中間件擴展后,我們就在管道的合適地方加入我們自定義的中間件。我們添加我們自定義的管道擴展OcelotPipelineExtensions,然后把自定義授權中間件加入到認證之后。

有了這個自定義的管道擴展后,我們需要應用到網關啟動里,修改我們創(chuàng)建管道的方法如下。

代碼很簡單,就是從緩存中查找看是否有數(shù)據(jù),如果存在直接返回,如果不存在,就從倉儲中提取訪問權限,然后寫入緩存,寫入緩存的時間可由配置文件寫入,默認為30分鐘,可自行根據(jù)業(yè)務需要修改。

現(xiàn)在我們還需要解決2個問題,這個中間件才能正常運行,第一IClientAuthenticationRepository接口未實現(xiàn)和注入;第二IOcelotCache<ClientRoleModel>未注入,那我們接下來實現(xiàn)這兩塊,然后就可以測試我們第一個中間件啦。

新建SqlServerClientAuthenticationRepository類,來實現(xiàn)IClientAuthenticationRepository接口,實現(xiàn)代碼如下。

現(xiàn)在需要注入下實現(xiàn),這塊應該都知道在哪里加入了吧?沒錯ServiceCollectionExtensions擴展又用到啦,現(xiàn)在梳理下流程感覺是不是很清晰呢?

builder.Services.AddSingleton<IClientAuthenticationRepository, SqlServerClientAuthenticationRepository>();builder.Services.AddSingleton<IAhphAuthenticationProcessor, AhphAuthenticationProcessor>();

再添加緩存的注入實現(xiàn),到此我們的第一個中間件全部添加完畢了,現(xiàn)在可以開始測試我們的中間件啦。

builder.Services.AddSingleton<IOcelotCache<ClientRoleModel>, InRedisCache<ClientRoleModel>>();

4、測試授權中間件

我們先在數(shù)據(jù)庫插入客戶端授權腳本,腳本如下。

這塊設置了客戶端2可以訪問路由/cjy/values,客戶端1可以訪問路由/cjy/values 和 /ctr/values/{id},開始使用PostMan來測試這個中間件看是否跟我設置的一毛一樣,各種dotnet run啟動吧。啟動前別忘了在我們網關配置文件里,設置啟動客戶端授權?option.ClientAuthorization = true;,是不是很簡單呢?

為了測試授權效果,我們需要把網關項目增加認證,詳細看代碼,里面就是定義了授權認證,啟動我們默認的認證地址。

測試結果如下,達到我們預期目的。



終于完成了我們的自定義客戶端授權啦,此處應該掌聲不斷。


5、增加mysql支持

看過我前面的文章應該知道,支持mysql太簡單啦,直接重寫IClientAuthenticationRepository實現(xiàn),然后注入到UseMySql里,問題就解決啦。感覺是不是不可思議,這就是.netcore的魅力,簡單到我感覺到我再貼代碼就是侮辱智商一樣。

6、重構認證失敗輸出,保持與Ocelot一致風格

前面我們定義了未授權使用自定義的ClientRoleModel輸出,最后發(fā)現(xiàn)這樣太不優(yōu)雅啦,我們需要簡單重構下,來保持與Ocelot默認管道一致風格,修改代碼如下。

再測試下未授權,返回狀態(tài)為401,強迫癥患者表示舒服多了。

四、總結及預告

本篇我們講解的是網關如何實現(xiàn)自定義客戶端授權功能,從設計到實現(xiàn)一步一步詳細講解,雖然只用一篇就寫完了,但是涉及的知識點還是非常多的,希望大家認真理解實現(xiàn)的思想,看我是如何從規(guī)劃到實現(xiàn)的,為了更好的幫助大家理解,從本篇開始,我的源代碼都是一個星期以后再開源,大家可以根據(jù)博客內容自己手動實現(xiàn)下,有利于消化,如果在操作中遇到什么問題,可以加.NET Core項目實戰(zhàn)交流群(QQ群號:637326624)咨詢作者。

下一篇開始講解自定義客戶端限流,在學習下篇前可以自己先了解下限流相關內容,然后自己試著實現(xiàn)看看,帶著問題學習可能事半功倍哦。

相關文章:

  • AspNetCore中使用Ocelot之 IdentityServer4

  • Ocelot-基于.NET Core的開源網關實現(xiàn)

  • .NET Core微服務之基于Ocelot+IdentityServer實現(xiàn)統(tǒng)一驗證與授權

  • Swagger如何訪問Ocelot中帶權限驗證的API

  • Ocelot.JwtAuthorize:一個基于網關的Jwt驗證包

  • .NET Core微服務之基于Ocelot實現(xiàn)API網關服務

  • .NET Core微服務之基于Ocelot實現(xiàn)API網關服務(續(xù))

  • .NET微服務體系結構中為什么使用Ocelot實現(xiàn)API網關

  • Ocelot簡易教程(一)之Ocelot是什么

  • Ocelot簡易教程(二)之快速開始1

  • Ocelot簡易教程(二)之快速開始2

  • Ocelot簡易教程(三)之主要特性及路由詳解

  • Ocelot簡易教程(四)之請求聚合以及服務發(fā)現(xiàn)

  • Ocelot簡易教程(五)之集成IdentityServer認證以及授權

  • Ocelot簡易教程(六)之重寫配置文件存儲方式并優(yōu)化響應數(shù)據(jù)

  • Ocelot簡易教程(七)之配置文件數(shù)據(jù)庫存儲插件源碼解析

  • ASP.NET Core中Ocelot的使用:API網關的應用

  • ASP.NET Core中Ocelot的使用:基于Spring Cloud Netflix Eureka的動態(tài)路由

  • ASP.NET Core中Ocelot的使用:基于服務發(fā)現(xiàn)的負載均衡

  • 【.NET Core項目實戰(zhàn)-統(tǒng)一認證平臺】第一章 功能及架構分析

  • 定制Ocelot來滿足需求

  • 【.NET Core項目實戰(zhàn)-統(tǒng)一認證平臺】第三章 網關篇-數(shù)據(jù)庫存儲配置(1)

  • 【.NET Core項目實戰(zhàn)-統(tǒng)一認證平臺】第四章 網關篇-數(shù)據(jù)庫存儲配置(2)

  • 【.NET Core項目實戰(zhàn)-統(tǒng)一認證平臺】第五章 網關篇-自定義緩存Redis


原文地址: https://www.cnblogs.com/jackcao/p/9973765.html


.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

總結

以上是生活随笔為你收集整理的【.NET Core项目实战-统一认证平台】第六章 网关篇-自定义客户端授权的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。