.NET自定义认证虽然简单,但好用
前言
有这样一种场景,就是新项目已经集成了认证中心,或者是都用了统一的认证方式(比如现在常用的JWT),这样对于项目之间的对接就显得比较方便,至少在认证这块还是能减少一些工作量的。但当上线的老项目需要对接新项目时,由于有些老项目通常会个性化的生成Token或者是通过一些标识传到后台进行认证,再加上老项目运行稳定和投入人力比较少的情况,很多时候都需要新的项目兼容老的认证方式,这个时候就可以考虑自定义的认证方式了。
正文
其实主要的原理就是根据项目的认证传参情况,从请求头或请求参数中取出对应的Token或标识进行验证即可;和很多小伙伴们一样,一开始想到的方法是通过授权过滤器的方式实现即可,但其实可以模仿AddJwtBearer的认证方式自己实现一个,主要的逻辑就是继承AuthenticationHandler之后,在HandleAuthenticateAsync方法中编写自己的验证就OK了,详细步骤如下:
1. 编写验证逻辑
这里还是创建一个WebAPI项目进行演示
1.1 定义自己的AuthenticationScheme
就像Bearer一样,定义自己的Scheme,在这个类里也可以定义需要的配置信息,可以在验证逻辑的时候用到,如下:
1.2 继承AuthenticationHandler编写自己的验证逻辑
添加一个类继承自AuthenticationHandler,重写HandleAuthenticateAsync方法,在里面可以写和业务相关的任何验证逻辑:
1.3 定义一个扩展方法,像AddJwtBearer一样使用
为了方便调用,按照规范为AuthenticationBuilder定义一个扩展方法:
2. 使用自定义的认证方式
上面的验证逻辑都写完了,接下来就像使用JWT认证一样直接使用即可,由于演示环境用的.NET5,在Startup.cs中注册相关服务和加上对应的认证中间件就行。
然后在需要认证控制器或Action方法上打上Authorize属性就行啦:
以上就是自定义认证方式的使用步骤,是不是很简单,来试一下效果:
加上Token再试试:
用Postman组装请求头试试,如下:
在请求头中加个Token再试试,如下:
好了,自定义认证的思路就是这样,只需要根据项目对接的情况,在校验逻辑那块改成项目实际的场景即可。
源代码地址:
https://gitee.com/CodeZoe/dot-net-core-study-demo/tree/main/CustomAuth
总结
以上方案其实在之前的项目也使用到了,最近对接新老系统时,又需要这块,间隔时间有点长,有一些小细节忘了,所以赶紧记录一下,下次直接翻文章就行啦。
关注“Code综艺圈”,和我一起学习吧。
.NET自定义认证虽然简单,但好用的更多相关文章
- ocelot 自定义认证和授权
ocelot 自定义认证和授权 Intro 最近又重新启动了网关项目,服务越来越多,每个服务都有一个地址,这无论是对于前端还是后端开发调试都是比较麻烦的,前端需要定义很多 baseUrl,而后端需要没 ...
- asp.net core 自定义认证方式--请求头认证
asp.net core 自定义认证方式--请求头认证 Intro 最近开始真正的实践了一些网关的东西,最近写几篇文章分享一下我的实践以及遇到的问题. 本文主要介绍网关后面的服务如何进行认证. 解决思 ...
- 【Spring Security】六、自定义认证处理的过滤器
这里接着上一章的自定义过滤器,这里主要的是配置自定义认证处理的过滤器,并加入到FilterChain的过程.在我们自己不在xml做特殊的配置情况下,security默认的做认证处理的过滤器为Usern ...
- springSecurity自定义认证配置
上一篇讲了springSecurity的简单入门的小demo,认证用户是在xml中写死的.今天来说一下自定义认证,读取数据库来实现认证.当然,也是非常简单的,因为仅仅是读取数据库,权限是写死的,因为相 ...
- Laravel 认证原理及完全自定义认证
Laravel 默认的 auth 功能已经是很全面了,但是我们也经常会碰到一些需要自定义的一些情况,比如验证的字段和默认的不匹配,比如需要能够同时满足 user name 和 email 认证等等.如 ...
- django 自定义认证
在Django中自定义身份验证 Django 自带的认证系统足够应付大多数情况,但你或许不打算使用现成的认证系统.定制自己的项目的权限系统需要了解哪些一些关键点,即Django中哪些部分是能够扩展或替 ...
- 带入gRPC:对 RPC 方法做自定义认证
带入gRPC:对 RPC 方法做自定义认证 原文地址:带入gRPC:对 RPC 方法做自定义认证项目地址:https://github.com/EDDYCJY/go... 前言 在前面的章节中,我们介 ...
- Spring Security自定义认证页面(动态网页解决方案+静态网页解决方案)--练气中期圆满
写在前面 上一回我们简单分析了spring security拦截器链的加载流程,我们还有一些简单的问题没有解决.如何自定义登录页面?如何通过数据库获取用户权限信息? 今天主要解决如何配置自定义认证页面 ...
- 跟我一起学Go系列:Go gRPC 安全认证方式-Token和自定义认证
Go gRPC 系列: 跟我一起学Go系列:gRPC安全认证机制-SSL/TLS认证 跟我一起学 Go 系列:gRPC 拦截器使用 跟我一起学 Go 系列:gRPC 入门必备 接上一篇继续讲 gRPC ...
随机推荐
- WPFApplication类
Application类 应用程序类Application,以下代码自动生成且在程序中不可见,定义程序入口点方法以及程序启动程序,整个程序生命周期为执行完Main()方法里的程序.对于自定义的应用程序 ...
- .NET 6上的WebView2体验
上次说为了不想在web端登录博客园,我想着还是继续使用MarkWord编写博客,不过在使用的过程中,如果markdown文件的目录中有中文的话,Markdown预览就不能够显示粘贴的图片了,原因是之前 ...
- 交换机POE技术知识大全
公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ 一个典型的以太网供电系统,在配线柜里保留以太网交换机设备,用一个带电源供电集线器(Midspan HUB)给局域网的双绞线提 ...
- 详解 Java 17 中新推出的密封类
Java 17推出的新特性Sealed Classes经历了2个Preview版本(JDK 15中的JEP 360.JDK 16中的JEP 397),最终定稿于JDK 17中的JEP 409.Seal ...
- go-micro集成RabbitMQ实战和原理
在go-micro中异步消息的收发是通过Broker这个组件来完成的,底层实现有RabbitMQ.Kafka.Redis等等很多种方式,这篇文章主要介绍go-micro使用RabbitMQ收发数据的方 ...
- 8┃音视频直播系统之 WebRTC 信令系统实现以及通讯核心并实现视频通话
一.信令系统 信令系统主要用来进行信令的交换 在通信双方彼此连接.传输媒体数据之前,它们要通过信令服务器交换一些信息,如规范协商 若 A 与 B 要进行音视频通信,那么 A 要知道 B 已经上线了,同 ...
- 496. Next Greater Element I - LeetCode
Question 496. Next Greater Element I Solution 题目大意:给你一个组数A里面每个元素都不相同.再给你一个数组B,元素是A的子集,问对于B中的每个元素,在A数 ...
- unity---Lighting面板
打开Lighting面板 将天空盒改为别墅 图片转化为Cube 设置一个材质球
- 112_Power Pivot 销售订单按 sku 订单类型特殊分类及占比相关
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 经过了一个双十一后,天天面对的都是订单.于是有了关于销售订单按sku类型分类的需求. 说明:(暂且不讨论这样分类 ...
- 安装Python到Linux(Pyenv)
pyenv是一个多Python版本的托管工具,我们可以使用它安装Python和随意的切换系统环境中默认使用的Python版本. 运行环境 系统版本:CentOS Linux release 7.6.1 ...