【.NET Core项目实战-统一认证平台】第十四章 授权篇-自定义授权方式
上篇文章我介绍了如何强制令牌过期的实现,相信大家对
IdentityServer4
的验证流程有了更深的了解,本篇我将介绍如何使用自定义的授权方式集成老的业务系统验证,然后根据不同的客户端使用不同的认证方式来集成到统一认证平台。.netcore项目实战交流群(637326624),有兴趣的朋友可以在群里交流讨论。
一、自定授权源码剖析
当我们需要使用开源项目的某些功能时,最好了解实现的原理,才能正确和熟练使用功能,避免出现各种未知bug问题和出现问题无法解决的被动场面。
在使用此功能前,我们需要了解完整的实现流程,下面我将从源码开始讲解IdentityServer4
是如何实现自定义的授权方式。
从我之前的文章中我们知道授权方式是通过Grant_Type
的值来判断的,所以我们自定义的授权方式,也是通过此值来区分,所以需要了解自定义的值处理流程。TokenRequestValidator
是请求验证的方法,除了常规验证外,还增加了自定义的验证方式。
从上面代码可以看出,除了内置的授权方式,其他的都是用ValidateExtensionGrantRequestAsync
来进行验证,详细的验证规则继续分析实现过程。
从代码中可以看出,实现流程如下:
1、客户端是否配置了自定义的授权方式。
2、是否注入了自定义的授权实现。
3、授权的scope客户端是否有权限。
4、使用自定义的授权验证方式校验请求数据是否合法。
5、判断是否有有效数据信息,可自行实现接口。
从源码中,可以发现流程已经非常清晰了,核心类ExtensionGrantValidator
实现了自定义授权的校验过程,进一步分析下此类的代码实现。
从上面代码可以发现,自定义授权方式,只需要实现IExtensionGrantValidator
接口即可,然后支持多个自定义授权方式的共同使用。
到此整个验证过程解析完毕了,然后再查看下生成Token流程,实现方法为TokenResponseGenerator
,这个方法并不陌生,前几篇介绍不同的授权方式都介绍了,所以直接看实现代码。
实现的代码方式和客户端模式及密码模式一样,这里就不多介绍了。
最后我们查看下是如何注入IExtensionGrantValidator
,是否对外提供接入方式,发现IdentityServer4
提供了AddExtensionGrantValidator
扩展方法,我们自己实现自定义授权后添加即可,详细实现代码如下。
二、自定义授权实现
现在开始开发第一个自定义授权方式,GrantType
定义为CzarCustomUser
,然后实现IExtensionGrantValidator
接口,为了演示方便,我新建一个测试用户表,用来模拟老系统的登录方式。
然后把实现验证的方法,由于代码太简单,我就直接贴代码如下。
现在可以定义自定义的授权类型了,我起名为CzarCustomUserGrantValidator
,实现代码如下。
这就实现了自定义授权的功能,是不是很简单呢?然后添加此扩展方法。
现在是不是就可以使用自定义授权的方式了呢?打开PostMan
测试,按照源码解析和设计参数,测试信息如下,发现报错,原来是还未配置好客户端访问权限,开启权限测试如下。
三、客户端权限配置
在使用IdentityServer4
时我们一定要理解整个验证流程。根据这次配置,我再梳理下流程如下:
1、校验客户端client_id和Client_Secret。
2、校验客户端是否有当前的授权方式。
3、校验是否有请求scope权限。
4、如果非客户端验证,校验账号密码或自定义规则是否正确。
5、非客户端验证,校验授权信息是否有效。
通过此流程会发现我们缺少授权方式配置,所以请求时提示上面的提示,既然知道原因了,那就很简单的来实现,添加客户端自定义授权模式。此信息是在ClientGrantTypes
表中,字段为客户端ID和授权方式。我测试的客户端ID为21,授权方式为CzarCustomUser
,那直接使用SQL语句插入关系,然后再测试。
INSERT INTO ClientGrantTypes VALUES(21,'CzarCustomUser');
发现可以获取到预期结果,然后查看access_token是什么内容,显示如下。
显示的信息和我们定义的信息相同,而且可以通过amr
来区分授权类型,不同的业务系统使用不同的认证方式,然后统一集成到认证平台即可。
四、总结与思考
本篇我介绍了自定义授权方式,从源码解析到最后的实现详细讲解了实现原理,并使用测试的用户来实现自定义的认证流程,本篇涉及的知识点不多,但是非常重要,因为我们在使用统一身份认证时经常会遇到多种认证方式的结合,和多套不同应用用户的使用,在掌握了授权原理后,就能在不同的授权方式中切换的游刃有余。
思考下,有了这些知识后,关于短信验证码登录和扫码登录是不是有心理有底了呢?如果自己实现这类登录应该都知道从哪里下手了吧。
下篇我将介绍常用登录的短信验证码授权方式,尽情期待吧。
相关文章:
AspNetCore中使用Ocelot之 IdentityServer4
Ocelot-基于.NET Core的开源网关实现
.NET Core微服务之基于Ocelot+IdentityServer实现统一验证与授权
Swagger如何访问Ocelot中带权限验证的API
Ocelot.JwtAuthorize:一个基于网关的Jwt验证包
.NET Core微服务之基于Ocelot实现API网关服务
.NET Core微服务之基于Ocelot实现API网关服务(续)
.NET微服务体系结构中为什么使用Ocelot实现API网关
Ocelot简易教程(一)之Ocelot是什么
Ocelot简易教程(二)之快速开始1
Ocelot简易教程(二)之快速开始2
Ocelot简易教程(三)之主要特性及路由详解
Ocelot简易教程(四)之请求聚合以及服务发现
Ocelot简易教程(五)之集成IdentityServer认证以及授权
Ocelot简易教程(六)之重写配置文件存储方式并优化响应数据
Ocelot简易教程(七)之配置文件数据库存储插件源码解析
ASP.NET Core中Ocelot的使用:API网关的应用
ASP.NET Core中Ocelot的使用:基于Spring Cloud Netflix Eureka的动态路由
ASP.NET Core中Ocelot的使用:基于服务发现的负载均衡
【.NET Core项目实战-统一认证平台】第一章 功能及架构分析
定制Ocelot来满足需求
【.NET Core项目实战-统一认证平台】第三章 网关篇-数据库存储配置(1)
【.NET Core项目实战-统一认证平台】第四章 网关篇-数据库存储配置(2)
【.NET Core项目实战-统一认证平台】第五章 网关篇-自定义缓存Redis
【.NET Core项目实战-统一认证平台】第六章 网关篇-自定义客户端授权
【.NET Core项目实战-统一认证平台】第七章 网关篇-自定义客户端限流
【.NET Core项目实战-统一认证平台】第八章 授权篇-IdentityServer4源码分析
【.NET Core项目实战-统一认证平台】第九章 授权篇-使用Dapper持久化IdentityServer4
【.NET Core项目实战-统一认证平台】第十章 授权篇-客户端授权
【.NET Core项目实战-统一认证平台】第十一章 授权篇-密码授权模式
【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程
【.NET Core项目实战-统一认证平台】第十三章 授权篇-如何强制有效令牌过期
原文地址: https://www.cnblogs.com/jackcao/p/10330397.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
【.NET Core项目实战-统一认证平台】第十四章 授权篇-自定义授权方式相关推荐
- 【.NET Core项目实战-统一认证平台】第四章 网关篇-数据库存储配置(2)
[.NET Core项目实战-统一认证平台]第四章 网关篇-数据库存储配置(2) 原文:[.NET Core项目实战-统一认证平台]第四章 网关篇-数据库存储配置(2) [.NET Core项目实战- ...
- 【.NET Core项目实战-统一认证平台】第七章 网关篇-自定义客户端限流
上篇文章我介绍了如何在网关上增加自定义客户端授权功能,从设计到编码实现,一步一步详细讲解,相信大家也掌握了自定义中间件的开发技巧了,本篇我们将介绍如何实现自定义客户端的限流功能,来进一步完善网关的基础 ...
- 【.NET Core项目实战-统一认证平台】第六章 网关篇-自定义客户端授权
上篇文章[.NET Core项目实战-统一认证平台]第五章 网关篇-自定义缓存Redis 我们介绍了网关使用Redis进行缓存,并介绍了如何进行缓存实现,缓存信息清理接口的使用.本篇我们将介绍如何实现 ...
- 【.NET Core项目实战-统一认证平台】第五章 网关篇-自定义缓存Redis
上篇文章[.NET Core项目实战-统一认证平台]第四章 网关篇-数据库存储配置(2)我们介绍了2种网关配置信息更新的方法和扩展Mysql存储,本篇我们将介绍如何使用Redis来实现网关的所有缓存功 ...
- 【.NET Core项目实战-统一认证平台】第三章 网关篇-数据库存储配置(1)
[.NET Core项目实战-统一认证平台]第三章 网关篇-数据库存储配置(1) 原文:[.NET Core项目实战-统一认证平台]第三章 网关篇-数据库存储配置(1) [.NET Core项目实战- ...
- 【.NET Core项目实战-统一认证平台】第十一章 授权篇-密码授权模式
上篇文章介绍了基于Ids4客户端授权的原理及如何实现自定义的客户端授权,并配合网关实现了统一的授权异常返回值和权限配置等相关功能,本篇将介绍密码授权模式,从使用场景.源码剖析到具体实现详细讲解密码授权 ...
- 【.NET Core项目实战-统一认证平台】第十三章 授权篇-如何强制有效令牌过期
上一篇我介绍了JWT的生成验证及流程内容,相信大家也对JWT非常熟悉了,今天将从一个小众的需求出发,介绍如何强制令牌过期的思路和实现过程. .netcore项目实战交流群(637326624),有兴趣 ...
- 【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程...
上篇文章介绍了基于Ids4密码授权模式,从使用场景.原理分析.自定义帐户体系集成完整的介绍了密码授权模式的内容,并最后给出了三个思考问题,本篇就针对第一个思考问题详细的讲解下Ids4是如何生成acce ...
- 【.NET Core项目实战-统一认证平台】第十章 授权篇-客户端授权
上篇文章介绍了如何使用Dapper持久化IdentityServer4(以下简称ids4)的信息,并实现了sqlserver和mysql两种方式存储,本篇将介绍如何使用ids4进行客户端授权. .ne ...
最新文章
- android html文字垂直居中,Android 浏览器文本垂直居中问题
- 设计Optaplanner下实时规划服务的失败经历
- VTK:可视化之ElevationBandsWithGlyphs
- nginx alias
- 《网络安全原理与实践》一2.1 安全区介绍
- 迄今为止最快的 JSON 序列化工具 Jil
- 协同过滤算法_基于Mahout的协同过滤推荐算法
- Bokeh 增加交互方式
- Oozie自带MapReduce示例的运行
- Layui实现Eharts图表
- journalctl如何使用?
- CentOS7查看和关闭防火墙
- 2023西安交通大学计算机考研信息汇总
- 【小工具类】将一个十进制数转化成二进制/四进制/八进制/16进制
- vs2022最新版本安装MVC4详细教程
- 愚人节这天,我辞职了
- DragonEnglish——COCA20000单词+音频+释义+例句及翻译内容聚合
- linux内核关系绘图工具_Linux中的绘图工具
- 小写金额转换成大写金额的函数
- python做动态课件素材_万万没想到,还能这么玩!用 Python 生成动态 PPT
热门文章
- 记事本状态栏不会自动_如何在记事本中同时启用状态栏和自动换行
- NOI2019省选模拟赛 第三场
- bzoj3160(FFT+回文自动机)
- 程序人生:织梦dedecms后台/会员验证码关闭
- Nginx图片剪裁模块探究 http_image_filter_module
- 美国银行将AI应用于企业应收账款处理
- java泛型不是计算运行时的数据类型
- 51CTO交流摘录(1):SOC的定义、适用性和组成
- 开源纯C#轻量级数据库引擎:SharpHSQL 1.0.3.0版本
- Blazor University (9)组件 — 代码生成 HTML 属性