.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 ...
随机推荐
- 项目开发字符串模型strstr_while
#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <std ...
- OpenHarmony 3.1 Beta版本关键特性解析——ArkUI容器类API介绍
(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 刘鑫 容器类,顾名思义就是存储的类,用于存储各种数据类型的元素,并具备一系列处理数据元素的方法.在 ArkUI 开发框 ...
- 从0开始用webpack开发antd,react组件库npm包并发布
一.初始化一个npm包 1.新建一个文件夹(名称随意,建议和报名一致),输入命令 :npm init -y 会自动生成一个包的说明文件 package.json如下(本文以scroll-antd-ta ...
- 微信小程序订阅消息
概述 消息能力是小程序能力中的重要组成,我们为开发者提供了订阅消息能力,以便实现服务的闭环和更优的体验. 订阅消息推送位置:服务通知 订阅消息下发条件:用户自主订阅 订阅消息卡片跳转能力:点击查看详情 ...
- 借助ADB冻结与卸载Android系统应用(免ROOT)
背景: 我妈的手机饱受系统应用广告推送之苦,每天都能在通知栏里收到好几条广告.为了给她个清净,本篇博文应运而生. 目标: 卸载安卓系统应用 所用工具: 硬件:我妈的手机(魅蓝5) PC端:Minima ...
- Windows平台安装SQLite3数据库
Windows平台安装SQLite3数据库 话不多说,开始! 访问SQLite官网下载资源 在搜索引擎中键入SQLite3关键字寻找官网入口或直接点击此处前往SQLite官网,官网界面如下: 点击页面 ...
- 经典!服务端 TCP 连接的 TIME_WAIT 过多问题的分析与解决
开源Linux 专注分享开源技术知识 本文给出一个 TIME_WAIT 状态的 TCP 连接过多的问题的解决思路,非常典型,大家可以好好看看,以后遇到这个问题就不会束手无策了. 问题描述 模拟高并发的 ...
- CTFHub-HTTP协议五关刷题解答
CTFHub 开箱即用的CTF学习解决方案 地址:https://www.ctfhub.com/#/skilltree 本次解答一共包括五关,没有先后顺序. 1.技能树一:请求方式 题目描述 打开后得 ...
- AMS 新闻视频广告的云原生容器化之路
作者 卓晓光,腾讯广告高级开发工程师,负责新闻视频广告整体后台架构设计,有十余年高性能高可用海量后台服务开发和实践经验.目前正带领团队完成云原生技术栈的全面转型. 吴文祺,腾讯广告开发工程师,负责新闻 ...
- Hadoop入门学习笔记(一)
Week2 学习笔记 Hadoop核心组件 Hadoop HDFS(分布式文件存储系统):解决海量数据存储 Hadoop YARN(集群资源管理和任务调度框架):解决资源任务调度 Hadoop Map ...