ocelot 自定义认证和授权
Intro
最近又重新啟動了網關項目,服務越來越多,每個服務都有一個地址,這無論是對于前端還是后端開發調試都是比較麻煩的,前端需要定義很多 baseUrl,而后端需要沒有代碼調試的時候需要對每個服務的地址都收藏著或者記在哪里,用的時候要先找到地址,甚是麻煩,有了網關之后,所有的 API 就有了統一的入口,對于前端來說就不需要維護那么多的 baseUrl,只需要網關的地址即可,對于后端來說也是同樣的。
Ocelot 簡介
Ocelot是一個用.NET Core實現并且開源的API網關,它功能強大,包括了:路由、請求聚合、服務發現、認證、鑒權、限流熔斷等功能,這些功能只都只需要簡單的配置即可完成。
自定義認證授權
自定義認證授權思想,這里的示例是一個基于用戶角色授權的示例:
基于 url 以及 請求 Method 查詢需要的權限
如果不需要用戶登錄就可以訪問,就直接往下游服務轉發
如果需要權限,判斷當前登錄用戶的角色是否可以以當前 Method 訪問當前路徑
如果可以訪問就轉發到下游服務,如果沒有權限訪問根據用戶是否登錄,已登錄返回 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
總結
以上是生活随笔為你收集整理的ocelot 自定义认证和授权的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软一顿操作猛如虎,PowerShell
- 下一篇: 程序员过关斩将--你的面向接口编程一定对