【Ids4实战】分模块保护资源API

(毕竟西湖六月中)

书接上文,上回书咱们说到了IdentityServer4(下文统称Ids4)官方已经从v3更新升级到了v4版本,我的Blog.Idp项目也做了同步更新,主要是针对快速启动UI做的对应修改,毕竟Ids4类库nuget包更新就是一键的事儿,具体的升级内容可参考:

《【Ids4实战】最全的 v4 版本升级指南》

更新的内容涉及的比较多,主要是对一些属性的优化,亦或者是对ASP.NetCore更兼容等等,其中我个人认为最核心也最重要的一个更新,就是新增了ApiResourceScopes表,进一步细化了对资源服务器的限制颗粒度,总结来说:

之前我们是一个客户端只能针对一个资源服务器来操作,那该资源服务器下的所有api都会被保护,当然也都会被控制。所以是面向整个ApiResources的。

但是现在做了细化以后,一个资源服务器可以分隔出多个作用域Scope,那这样的话,我们就可以定义多个客户端,分模块的去访问同一个统一的资源服务器

比如BlogVue项目,访问Blog相关的api;TibugNuxt项目,访问Tibug相关的api。

这里先不要着急的抬杠这么扩展的好处和优劣点,等到自己有需要,或者自己有这样的需求的时候就明白了,本文不做解释,只是一把梭的讲解如何配置三端,从而满足分模块保护资源API的目的。

本文我就用http://vueblog.neters.club项目举例,将Blog.Core资源服务器中定义一个Blog模块,来实现基于Scope的策略授权方案配置,主要是针对三端进行配置。

1、Blog.Idp认证中心配置

首先我们需要定义一个单独的资源服务器作用域,然后将这些作用域配置到资源上:

// v4更新
public static IEnumerable<ApiScope> GetApiScopes()
{return new ApiScope[] {new ApiScope("blog.core.api"),new ApiScope("blog.core.api.BlogModule"),};
}public static IEnumerable<ApiResource> GetApiResources()
{// blog.core 项目return new List<ApiResource> {new ApiResource("blog.core.api", "Blog.Core API") {// include the following using claims in access token (in addition to subject id)//requires using using IdentityModel;UserClaims = { JwtClaimTypes.Name, JwtClaimTypes.Role,"rolename" },// v4更新Scopes={ "blog.core.api","blog.core.api.BlogModule"},ApiSecrets = new List<Secret>(){new Secret("api_secret".Sha256())},}};
}

这些基础代码肯定都能看的懂吧,只要你学会Ids4,肯定都明白,那对应到数据库里,就是这样的:

然后需要配置客户端Client,将我们需要的Scope赋给指定的客户端:

对应的数据库也是很简单:

这里给大家再啰嗦一句,要学好Ids4,数据库表结构一定要做到了然于胸,什么数据对应什么表,什么错误对应什么配置,要做到心中有数。

到这里认证中心就配置完了,接下来就是客户端了。

2、Blog.Vue配置认证连接

这个地方很简单,和之前几乎一模一样,只是在scope作用域上,改一下资源的域就行:

  constructor () {super({authority: 'https://ids.neters.club',client_id: 'blogvuejs',redirect_uri: 'http://localhost:6688/callback',response_type: 'id_token token',scope: 'openid profile roles blog.core.api.BlogModule',post_logout_redirect_uri: 'http://localhost:6688'})}

就是代码中的 blog.core.api.BlogModule 这个Scope。

那就剩下最后一步了,配置资源服务器,既然使用到了作用域Scope,那就需要针对具体的作用域,配置具体的策略方案。

3、Blog.Core增加Scope策略授权

这里先说下,为了达到封装的效果呢,我把认证和授权分开写了,结构是这样的:

既然我们现在是增加了作用域Scope,那就是需要一个基于Scope的策略授权方案,在授权扩展类AuthorizationSetup.cs中,添加代码:

 // 4、基于 Scope 策略授权services.AddAuthorization(options =>{// 博客模块的策略options.AddPolicy("Scope_BlogModule_Policy", builder =>{//客户端Scope中包含blog.core.api.BlogModule才能访问builder.RequireScope("blog.core.api.BlogModule");});// 其他模块的策略// ...});

我们可以根据需要添加多个模块,每个模块会对应一个Scope,那每个Scope又对应一个客户端Client,这样就实现了项目基本的授权方案,认证相关的配置不用动。

然后只需要在指定的控制器或者Action上配置权限特性就行:

到这里基本就搞定了,调试后,可以发现新生成的Token令牌也发生了变化:

可能你会说,那我已经使用了复杂的基于数据库的策略授权,为啥还要搞这个呢?

我是这么想的,毕竟这个面向scope开发是可以在ids4可控的,细分到客户端的,这么配置好后,就不用配置复杂的数据库了,当然这一般都是针对前台的展示项目,后端Admin项目肯定需要很复杂的数据库配置更好。

今天就这么多了,自己动手试试吧。

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

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

相关文章

[SpringBoot2]拦截器

拦截器 1.编写一个拦截器实现HandlerInterceptor接口2.拦截器注册到容器中(实现WebMvcConfigurer的addInterceptors)3.指定拦截规则[如果是拦截所有&#xff0c;静态资源也会被拦截] 1、HandlerInterceptor 接口 /*** 登录检查* 1、配置好拦截器要拦截哪些请求* 2、把这些配…

数据结构与算法专题——第九题 鸡尾酒排序

这篇我们来聊一下鸡尾酒排序&#xff0c;为了知道为啥取名为鸡尾酒&#xff0c;特意看了下百科&#xff0c;见框框的话&#xff0c;也只能勉强这么说了。要是文艺点的话&#xff0c;可以说是搅拌排序&#xff0c;通俗易懂点的话&#xff0c;就叫“双向冒泡排序”&#xff0c;我…

[SpringBoot2]错误处理_默认规则

错误处理 默认规则 ● 默认情况下&#xff0c;Spring Boot提供/error处理所有错误的映射 ● 对于机器客户端&#xff0c;它将生成JSON响应&#xff0c;其中包含错误&#xff0c;HTTP状态和异常消息的详细信息。对于浏览器客户端&#xff0c;响应一个“ whitelabel”错误视图&…

C#高级技师语法,你会吗?

【导读】呀&#xff0c;最近太忙了&#xff0c;没什么时间去看和学习&#xff0c;既然长篇文章一时半会吐不出来&#xff0c;短篇还是可以搞搞&#xff0c;操作系统绝不会断更。本文我们来搞点C#中高逼格语法。>这玩意从C&#xff03;6开始支持方法&#xff0c;运算符和只读…

将终结点图添加到你的ASP.NET Core应用程序中

在本文中&#xff0c;我将展示如何使用DfaGraphWriter服务在ASP.NET Core 3.0应用程序中可视化你的终结点路由。上面文章我向您演示了如何生成一个有向图&#xff08;如我上篇文章[译]使用DOT语言和GraphvizOnline来可视化你的ASP.NETCore3.0终结点01中所示&#xff09;&#x…

再见,RabbitMQ,你好,Kafka!

容器、Kubernetes、DevOps、微服务、云原生&#xff0c;这些技术名词的频繁出现&#xff0c;预兆着新的互联网技术时代的到来&#xff0c;大数据高并发将不再遥远&#xff0c;而是大部分项目都必须具备的能力了&#xff0c;而消息队列是必备的了。成熟的消息队列产品很多&#…

[SpringBoot2]数据访问_数据库场景的自动配置分析和整合测试

数据访问 1、导入jdbc场景 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency>数据库驱动&#xff1f; 为什么导入JDBC场景&#xff0c;官方不导入驱动&…

【视频回放与课件】搭上AI快车-在线公益课堂:基于移动应用的人工智能开发...

今天&#xff0c;受广州图书馆邀请&#xff0c;通过腾讯会议推出搭上AI快车系列在线公益讲座第三讲《基于移动应用的人工智能开发》&#xff0c;本次课程实时参与参与直播互动人数超过300人&#xff0c;虽然课程10点钟才正式开始&#xff0c;但是9点已经有许多小伙伴已经进来直…

dotNET:怎样处理程序中的异常(理论篇)?

平时在软件开发的过程中&#xff0c;首先是要保证功能可以正常运行&#xff0c;满足业务需求&#xff0c;除此之外&#xff0c;还需要考虑代码在异常的时候怎么处理&#xff0c;让程序能够健壮地运行。正确合理地处理异常可以减少程序的 Bug、保证代码质量&#xff0c;当然也不…

[Spring5]IOC容器_底层原理

IOC的概念和原理 什么是IOC 1.控制反转&#xff0c;把对象创建和对象之间的调用过程&#xff0c;交给Spring进行管理 2.使用IOC目的&#xff1a;为了耦合度减低 IOC底层原理 xml解析工厂模式反射 底层原理示例图 目的&#xff1a;将耦合度降低到最低限度 IOC过程 1.xml…

使用Azure DevOps Pipeline实现.Net Core程序的CI

上次介绍了Azure Application Insights&#xff0c;实现了.net core程序的监控功能。这次让我们来看看Azure DevOps Pipeline功能。Azure DevOps Pipeline 是Azure DevOps里面的一个组件&#xff0c;对于12个月试用账号同样永久免费。持续集成CI持续集成指的是&#xff0c;频繁…

Blazor带我重玩前端(四)

布局Blazor中的布局和MVC中的布局是类似的。创建布局新建一个Razor页面&#xff0c;所有新增的布局都要继承LayoutComponentBase&#xff0c;同时标识自定义内容的输出位置&#xff0c;即标识Body的位置。如图所示&#xff1a;应用布局我们修改一下index.razor页面中的代码&…

kubernetes+Azure DevOps实现.Net Core项目的自动化部署均衡负载

1. 前言前前后后学习kubernetes也有一个来月了&#xff0c;关于kubernetes的博客也写了有十多篇。但是技术如果无法落地到实际的应用场景终归是纸上谈兵&#xff0c;所以就有了这一出&#xff1a;通过结合kubernetes和azure devops实现项目的CI/CD以及均衡负载写完这篇后kubern…

ASP.NET Core 消息传递:MediatR

MediatR[1] 是参考中介者模式实现的一个 .NET 工具类库&#xff0c;支持在进程内以单播或多播的形式进行消息传递&#xff0c;通过使用 MediatR 可实现消息的发送和处理充分解耦。在介绍 MediatR 之前&#xff0c;先简单了解下中介者模式。中介者模式主要是指定义一个中介对象来…

[Spring5]IOC容器_Bean管理XML方式_注入其他类型属性

xml注入其他属性 bean: package com.atguigu.spring;/*** 演示使用set方法进行注入属性*/ public class Book {private String bname;private String bauthor;private String address;public Book(String address) {this.address address;}public String getBname() {return…

ERP平台的自动化测试技术实践

源宝导读&#xff1a;ERP是“业务密集”的大型复杂软件&#xff0c;而且对于业务逻辑与数据的精确度要求几乎是零容忍&#xff0c;其质量保障的挑战很大。本文将介绍ERP平台通过自动化测试保障质量的技术实践。一、自动化测试概念介绍测试金字塔原理1.1、测试的成本UI自动化依赖…

[Spring5]IOC容器_Bean管理XML方式_注入集合类型属性

xml注入集合属性 1.注入数组类型属性 2.注入List集合类型属性 3.注入Map集合类型属性 &#xff08;1&#xff09;创建类&#xff0c;定义数组&#xff0c;list&#xff0c;map&#xff0c;set类型属性&#xff0c;生成对应set方法 package com.atguigu.collectiontype;imp…

Logging with ElasticSearch, Kibana, ASP.NET Core and Docker

“好久不见&#xff0c;前两周经历了人生第一次"伪牛市"&#xff0c;基金和股市大起大落&#xff0c;更加坚信“你永远赚不到超出你认知范围之外的钱,除非靠着运气”&#xff0c;老韭菜诚不欺我也。当能力与野心不匹配&#xff0c;只能多看书&#xff0c;收割那些不求…

[Spring5]IOC容器_Bean管理_工厂Bean

IOC操作Bean管理&#xff08;FactoryBean&#xff09; 1.Spring有两种类型bean&#xff0c;一种普通bean&#xff0c;另外一种工厂bean&#xff08;FactoryBean&#xff09; 2.普通bean&#xff1a;在配置文件中定义bean类型就是返回类型 3.工厂bean&#xff1a;在配置文件定…

Redis 6.0 新特性 ACL 介绍

Redis 6.0 新特性 ACL 介绍Intro在 Redis 6.0 中引入了 ACL&#xff08;Access Control List) 的支持&#xff0c;在此前的版本中 Redis 中是没有用户的概念的&#xff0c;其实没有办法很好的控制权限&#xff0c;redis 6.0 开始支持用户&#xff0c;可以给每个用户分配不同的权…