【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"]
}

认证

 

640?wx_fmt=png

权限验证

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,直接上代码:

640?wx_fmt=png

640?wx_fmt=png

其中_permissionAuthoriser.Authorise为权限验证方法,继续往下看实现逻辑

640?wx_fmt=png

其中_permissionRepository.Permissions是应用的接口列表与接口对应的可访问scope;权限仓储下面进行介绍

接口权限如何动态配置与修改

认证授权数据库设计,tb_api_resources Api资源表、tb_roles 角色表、tb_role_apis 角色Api资源关系表、tb_users 用户表、tb_user_roles 用户角色表

640?wx_fmt=png

常规验证权限方式,是根据用户的id查询用户角色,然后验证角色是否拥有接口权限;而在网关中是反过来该接口有哪些角色可以访问;

所以我们需要初始化出应用接口对应所需角色,目前我们实现了mysql版本的权限仓储IPermissionRepository的数据查询,代码如下

640?wx_fmt=png

640?wx_fmt=png

这里只会实现一次查询,如果中间有接口权限进行了修改,那么如何进行更新呢,在上一篇配置中间使用中,我们介绍了如何使用组件的定时任务和组件的监听方式,所以我们只需做对应扩展即可,定时代码就不贴了,监听代码如下:

640?wx_fmt=png

下面贴一下Bucket.Authorize如何使用代码

640?wx_fmt=png

然后在需要认证授权的action或者controller加上[Authorize("permission")]属性,appsetting配置如下,也可移至配置中心

640?wx_fmt=png

前后端分离模式下通用的后台管理系统

在FamilyBucket-UI中我们可以对项目的接口权限认证方式、用户、用户角色、角色、角色权限、角色菜单等等进行配置,

同时FamilyBucket-UI还具有通用管理系统的基础模块,里面增加一个管理平台的概念,可以直接多个管理平台使用同一个用户体系

本章就不做介绍了,内容有点长,下次再做详细介绍,在多平台同时管理时项目还需要进行一些升级,截图如下

640?wx_fmt=png

本章涉及源码均可在github中进行查看

https://github.com/q315523275/FamilyBucket

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

相关文章:

  • 【NET CORE微服务一条龙应用】第一章 网关使用与配置

  • 【NET CORE微服务一条龙应用】第二章 配置中心使用

  • 【NET CORE微服务一条龙应用】应用部署

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

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317027.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round #725 (Div. 3) 题解

文章目录A. Stone GameB. Friends and CandiesC. Number of PairsD. Another Problem About Dividing NumbersE. Funny SubstringsF. Interesting FunctionG. Gift Set#725-Div.3A. Stone Game 先找到最大值最小值的位置,然后有三种选取(两边中走一边/两…

I - Triple HDU - 5517

I - Triple HDU - 5517 题意&#xff1a; 由多重集A和多重集B&#xff0c;<a,b>∈A&#xff0c;<c,d,e>∈B&#xff0c;集合CA * B{<a,c,d>|<a,b>∈A&#xff0c;<c,d,e>∈B and be}。 现在需要你求出有多少个<a,c,d>满足&#xff1a;不…

模板:广义二项式反演/广义容斥(组合数学)

文章目录前言经典容斥原理广义二项式反演/广义容斥min-max 容斥所谓二项式反演&#xff0c;就是对两个项的式子进行反演。 &#xff08;逃&#xff09; 前言 期望和容斥是我的感性二兄弟&#xff01; 之前的容斥我基本也都是靠感性理解做的… 感性理解就会导致&#xff1a;考…

WebApiClient与Asp.net core DI的结合

1 WebApiClient一款基于HttpClient封装&#xff0c;只需要定义c#接口并修饰相关特性&#xff0c;即可异步调用远程http接口的客户端库WebApiClientWebApiClient.ExtensionsWebApiClient.Tools2 Http接口的注册与提供2.1 声明远程端http接口public interface IBaiduApi : IHttpA…

Codeforces Round #717 (Div. 2)

Codeforces Round #717 (Div. 2) CodeForces 1516 题号题目知识点ATit for Tat贪心BAGAGA XOOORRR思维题CBaby Ehab Partitions AgainDCutEBaby Ehab Plays with Permutations

梁迪:源于热爱乐于分享,MVP代表圆桌会议

梁迪《MVP代表圆桌会议》MVP代表圆桌会议&#xff0c;源于热爱乐于分享。来自全国的MVP&#xff08;周岳、苏震巍、蒋金楠、胡浩、卿毅、项斌、刘浩杨、施兆熊、方洁影、方骥、刘鑫、童广林&#xff09;作经验交流。梁 迪微软最有价值专家&#xff08;MVP&#xff09;项目大…

2.7模拟总结

文章目录前言考场题目解析T1T2T3代码T1 forestT2 eulerT3 graph前言 130pts 2010010 终于没有挂分&#xff01; 开心&#xff01; 然而今天的题确实过于阴间…三道题几乎都没法写暴力&#xff0c;爆零场了属于是。 我这个分数都能到rnk4勒。 &#xff08;rnk39->rnk4&#…

基于xlua和mvvm的unity框架

1、框架简介这两天在Github上发现了xlua的作者车雄生前辈开源的一个框架—XUUI&#xff0c;于是下载下来学习了一下。XUUI基于xlua&#xff0c;又借鉴了mvvm的设计概念。xlua是目前很火的unity热更方案&#xff0c;不仅支持纯lua脚本热更&#xff0c;也可以做 C# 代码的bug hot…

A - Tit for Tat CodeForces - 1516A

A - Tit for Tat CodeForces - 1516A 题意&#xff1a; 一个长度为 n 的数组&#xff0c;现在希望你对这个数组进行至多k次操作&#xff1a;在数组中选择 2 个不同的元素&#xff0c;将第一个元素加 1 &#xff0c;然后从第二个元素减 1 。不过他有一个要求&#xff0c;进行操…

Codeforces Round #703 (Div. 2) 题解

文章目录A. Shifting StacksB. Eastern ExhibitionC. Guessing the GreatestD. Max MedianE. Paired PaymentF. Pairs of Paths#703 (Div. 2)A. Shifting Stacks 从左往右构造递增0,1,2...&#xff0c;如果这样都不能递增就肯定无解 雷区&#xff1a;不能用等差数列算个数&am…

AGAGA XOOORRR CodeForces - 1516B

AGAGA XOOORRR CodeForces - 1516B 题意&#xff1a; 给定一个长度为n的序列&#xff0c;对其进行若干次操作&#xff0c;每次操作将某相邻两数变为他们的异或和&#xff08;操作后序列长度减一&#xff09;。问是否可以经过若干次操作&#xff0c;得到一个长度至少为2且所有…

2.8模拟总结

前言 80pts 303020 rnk10 三个暴力分… T2拿虚树玩了半天结果假了qwq 乍一看似乎都挺可做的。 但是一道都做不出来 &#xff08;觉得写考场过程有点流水账&#xff0c;不写了&#xff0c;一些想说的写在对应题目里吧&#xff09; 题目解析 T1 三角查找&#xff08;triangle&…

如何在ASP.NET Core中使用JSON Patch

原文&#xff1a; JSON Patch With ASP.NET Core作者&#xff1a;.NET Core Tutorials译文&#xff1a;如何在ASP.NET Core中使用JSON Patch地址&#xff1a;https://www.cnblogs.com/lwqlun/p/10433615.html译者&#xff1a;Lamond LuJSON Patch是一种使用API显式更新文档的方…

Codeforces Round #709 (Div. 2, based on Technocup 2021 Final Round) 题解

文章目录A. Prison BreakB. Restore ModuloC. Basic DiplomacyD. PlaylistE. Skyline PhotoF. Useful Edges#709 (Div. 2)A. Prison Break 就是每个监狱破一扇门&#xff0c;输出aba\times bab即可 B. Restore Modulo 就是取模意义下的操作&#xff0c;分大小操作&#xff0…

351E. Jeff and Permutation

351E. Jeff and Permutation 题意&#xff1a; 一个长度为n的序列&#xff0c;你可以选择一些位置&#xff0c;使其变成相反数&#xff0c;问逆序对最少是多少&#xff1f; 题解&#xff1a; 对于第i位&#xff0c;我们开始考虑他能决定的逆序对&#xff1f;对于其他任意位…

.NET Core RSA密钥的xml、pkcs1、pkcs8格式转换和JavaScript、Java等语言进行对接

众所周知在.NET下的RSA类所生成的密钥为Xml格式&#xff0c;而其他语言比如java一般使用pkcs8格式的密钥&#xff0c;JavaScript一般使用pkcs1格式。我们在开发过程中很可能遇到需要与其他语言开发的api进行对接&#xff0c;如果遇到RSA加密解密&#xff0c;我们肯定需要保证ke…

2.9模拟总结

文章目录前言题目解析序列计数&#xff08;sequence&#xff09;T2 网格选点&#xff08;grid&#xff09;T3 孤立点集&#xff08;isolated&#xff09;代码T1T2T3总结前言 180pts 3050100 rnk10 题目比较简单的一场考试。 不太满意。 T3是做过的原题&#xff0c;切了不算啥…

AtCoder Beginner Contest 203(Sponsored by Panasonic)题解

文章目录A - ChinchirorinB - AtCoder CondominiumC - Friends and Travel costsD - PondE - White PawnF - WeedABC203A - Chinchirorin 三个条件if判 #include <cstdio> int main() {int a, b, c;scanf( "%d %d %d", &a, &b, &c );if( a b ) …

AcWing 1068. 环形石子合并

AcWing 1068. 环形石子合并 题意&#xff1a; n堆石头围成一个圈&#xff0c;然后将相邻两堆合并成新的一堆&#xff0c;得分为新的一堆的石头数 问最高得分合最低得分 题解&#xff1a; 很简单&#xff0c;区间dp的模板题 和这个题一样 状态转移方程&#xff1a; dpmax[i]…

2.10模拟总结

文章目录前言题目解析随机减法&#xff08;calculate&#xff09;大图书馆&#xff08;bibliotheca&#xff09;子串选取 &#xff08;substr&#xff09;代码T1T2T3总结前言 200pts 4010060 rnk3 拿到牌勒嘿嘿嘿&#xff08;脑补流口水黄豆&#xff09; T3两个log想在ybt的机…