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

【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)

分享創造快樂