歡迎光臨
每天分享高質量文章

ocelot 自定義認證和授權

Intro

最近又重新啟動了閘道器專案,服務越來越多,每個服務都有一個地址,這無論是對於前端還是後端開發除錯都是比較麻煩的,前端需要定義很多 baseUrl,而後端需要沒有程式碼除錯的時候需要對每個服務的地址都收藏著或者記在哪裡,用的時候要先找到地址,甚是麻煩,有了閘道器之後,所有的 API 就有了統一的入口,對於前端來說就不需要維護那麼多的 baseUrl,只需要閘道器的地址即可,對於後端來說也是同樣的。

Ocelot 簡介

Ocelot是一個用.NET Core實現並且開源的API閘道器,它功能強大,包括了:路由、請求聚合、服務發現、認證、鑒權、限流熔斷等功能,這些功能只都只需要簡單的配置即可完成。

自定義認證授權

自定義認證授權思想,這裡的示例是一個基於使用者角色授權的示例:

  1. 基於 url 以及 請求 Method 查詢需要的許可權

  2. 如果不需要使用者登入就可以訪問,就直接往下游服務轉發

  3. 如果需要許可權,判斷當前登入使用者的角色是否可以以當前 Method 訪問當前路徑

  4. 如果可以訪問就轉發到下游服務,如果沒有許可權訪問根據使用者是否登入,已登入傳回 403 Forbidden,未登入傳回 401 Unauthorized

Ocelot 的 認證授權不能滿足我的需要,於是就自己擴充套件了一個 Ocelot 的中介軟體

示例程式碼

認證授權之後

經過上面的認證授權之後,就可以往下游轉發請求了,下游的服務有的可能會需要判斷使用者的角色或者需要根據使用者的 userId 或者 Name 或者 郵箱去檢查某些資料的許可權,這裡就需要把在閘道器完成認證之後,得到的使用者資訊傳遞給下游服務,這裡我選擇的是透過請求頭把使用者資訊從閘道器服務傳遞到下游服務, Ocelot 可以把 Claims 中的資訊轉換到 Header ,詳細參考Ocelot檔案,但是實現有個bug,如果有多個值他只會取第一個,詳見issue,可以自己擴充套件一個 ocelot 的中介軟體替換掉原有的中介軟體。

傳遞到下游服務之後,下游服務在需要使用者資訊的地方就可以從請求頭中獲取使用者資訊,如果下游服務比較複雜,不方便改動的話可以實現一個自定義的請求頭認證,可以參考我的這一篇文章ASP.NET Core 自定義認證方式–請求頭認證

原文地址:https://www.cnblogs.com/weihanli/p/custom-authentication-authorization-in-ocelot.html


.NET社群新聞,深度好文,歡迎訪問公眾號文章彙總 http://www.csharpkit.com