热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

.NET自定义认证虽然简单,但好用

前言有这样一种场景,就是新项目已经集成了认证中心,或者是都用了统一的认证方式(比如现在常用的JWT),这样对于项目之间的对接就显得比较方便,至少在认证这块还是能减少一些工作量的。但

前言

有这样一种场景,就是新项目已经集成了认证中心,或者是都用了统一的认证方式(比如现在常用的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综艺圈”,和我一起学习吧。


推荐阅读
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 由于同源策略的限制,满足同源的脚本才可以获取资源。虽然这样有助于保障网络安全,但另一方面也限制了资源的使用。那么如何实现跨域呢,以下是实现跨域的一些方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 在IDEA中运行CAS服务器的配置方法
    本文介绍了在IDEA中运行CAS服务器的配置方法,包括下载CAS模板Overlay Template、解压并添加项目、配置tomcat、运行CAS服务器等步骤。通过本文的指导,读者可以轻松在IDEA中进行CAS服务器的运行和配置。 ... [详细]
  • Python15行代码实现免费发送手机短信,推送消息「建议收藏」
    Python15行代码实现免费发 ... [详细]
  • AstridDAO 专访:波卡稳定币黑马 BAI
    加入Pol ... [详细]
  • Thisworkcameoutofthediscussioninhttps://github.com/typesafehub/config/issues/272 ... [详细]
  • Imdevelopinganappwhichneedstogetmusicfilebystreamingforplayinglive.我正在开发一个应用程序,需要通过流 ... [详细]
  • python3下载mapbox矢量切片通过观察mapbox的页面开发者工具里的network可以发现,打开矢量切片和字体切片pbf和prite图标的链接, ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
author-avatar
MICH泪的矿脉AEI
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有