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

【NET CORE微服務一條龍應用】第三章 認證授權與動態權限配置

介紹

系列目錄:【NET CORE微服務一條龍應用】開始篇與目錄

在微服務的應用中,統一的認證授權是必不可少的組件,本文將介紹微服務中網關和子服務如何使用統一的權限認證

主要介紹內容為:

1、子服務如何實現和網關相同的鑒權方式

2、接口權限如何動態配置與修改

3、前後端分離樣式下通用的後臺管理系統(用戶、權限、選單、平臺)

需提前瞭解知識點:

1、Jwt (JSON Web Token)

2、ClaimsPrincipal

3、Microsoft.AspNetCore.Authorization、AuthorizationPolicy、AuthorizationHandler

子服務和網關鑒權方式

首先我們需要瞭解一下Ocelot網關權限的使用方式,直接上代碼

配置

"AuthenticationOptions": {
    "AuthenticationProviderKey": "TestKey",
    "AllowedScopes": ["admin","user"]
}

認證

權限驗證

var authorised = _scopesAuthoriser.Authorise(context.HttpContext.User, context.DownstreamReRoute.AuthenticationOptions.AllowedScopes);

從以前的代碼我們可以看出認證授權的邏輯

1、HttpContext.AuthenticateAsync來進行認證驗證,即驗證Jwt token的有效可用性,其中AuthenticationProviderKey為身份驗證提供程式標識,例如

public void ConfigureServices(IServiceCollection services)
{
    var authenticationProviderKey = "TestKey";
    services.AddAuthentication().AddJwtBearer(authenticationProviderKey, x => { });
}

2、當1驗證通過後,我們可以通過context.HttpContext.User獲取key為scope的Claim陣列信息(所以token生成要帶上此引數),然後與配置的AllowedScopes的陣列進行交集驗證,當交集大於0時即為有權限訪問

所以子服務如果需要實現和網關相同的權限驗證就需要實現以上的方式,用過net core預設的權限認證時會發現,權限的驗證都需要體現設定好接口的可訪問角色等引數,這不符合我們的需求所以我們需要實現一個自定義的權限認證AuthorizationHandler,直接上代碼:

其中_permissionAuthoriser.Authorise為權限驗證方法,繼續往下看實現邏輯

其中_permissionRepository.Permissions是應用的接口串列與接口對應的可訪問scope;權限倉儲下麵進行介紹

接口權限如何動態配置與修改

認證授權資料庫設計,tb_api_resources Api資源表、tb_roles 角色表、tb_role_apis 角色Api資源關係表、tb_users 用戶表、tb_user_roles 用戶角色表

常規驗證權限方式,是根據用戶的id查詢用戶角色,然後驗證角色是否擁有接口權限;而在網關中是反過來該接口有哪些角色可以訪問;

所以我們需要初始化出應用接口對應所需角色,目前我們實現了mysql版本的權限倉儲IPermissionRepository的資料查詢,代碼如下

 

這裡只會實現一次查詢,如果中間有接口權限進行了修改,那麼如何進行更新呢,在上一篇配置中間使用中,我們介紹瞭如何使用組件的定時任務和組件的監聽方式,所以我們只需做對應擴展即可,定時代碼就不貼了,監聽代碼如下:

下麵貼一下Bucket.Authorize如何使用代碼

然後在需要認證授權的action或者controller加上[Authorize(“permission”)]屬性,appsetting配置如下,也可移至配置中心

前後端分離樣式下通用的後臺管理系統

在FamilyBucket-UI中我們可以對專案的接口權限認證方式、用戶、用戶角色、角色、角色權限、角色選單等等進行配置,

同時FamilyBucket-UI還具有通用管理系統的基礎模塊,裡面增加一個管理平臺的概念,可以直接多個管理平臺使用同一個用戶體系

本章就不做介紹了,內容有點長,下次再做詳細介紹,在多平臺同時管理時專案還需要進行一些升級,截圖如下

本章涉及原始碼均可在github中進行查看

https://github.com/q315523275/FamilyBucket

https://github.com/q315523275/FamilyBucket-UI

 

相關文章:

原文地址:https://www.cnblogs.com/tianxiangzhe/p/10419334.html

赞(0)

分享創造快樂