惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
云风的 BLOG
云风的 BLOG
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
Engineering at Meta
Engineering at Meta
Vercel News
Vercel News
Y
Y Combinator Blog
B
Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Check Point Blog
M
MIT News - Artificial intelligence
Jina AI
Jina AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Apple Machine Learning Research
Apple Machine Learning Research
Hugging Face - Blog
Hugging Face - Blog
阮一峰的网络日志
阮一峰的网络日志
罗磊的独立博客
Stack Overflow Blog
Stack Overflow Blog
F
Fortinet All Blogs
博客园 - 司徒正美
I
InfoQ
Google DeepMind News
Google DeepMind News
GbyAI
GbyAI
U
Unit 42

博客园 - 温森特

企业应用架构研究系列十三:整合EFCore&Dapper 通用ORM框架EFDapper 企业应用架构研究系列二十四:SQL Server 数据库调优之XEvent 探查器 企业应用架构研究系列二十五:IdentityServer4 认证服务搭建 企业应用架构研究系列十二:网络模型与网络协议 企业应用架构研究系列二十三:微服务之程序网关YARP 企业应用架构研究系列二十六:信号量SemaphoreSlim与Semaphore 企业应用架构研究系列二十七:Vue3.0 之环境的搭建与Vue Antd Admin探索 企业应用架构研究系列五:极限编程(XP)& 敏捷管理(Scrum) 企业应用架构研究系列二十:创建&发布Docker 企业应用架构研究系列十九:Docker开发环境 前端NEXT实践系列:(一)ECMAScript 6.0技术栈 企业应用架构研究系列三:应用系统集成 企业应用架构研究系列二:MSF&Scrum 项目管理 企业应用架构研究系列一:业务拆分 .NET Standard 跨平台支持的实践 Azure技术系列之Redis篇---第一章数据缓存 MERGE MOSS 2013研究系列---修改默认Logo MOSS 2013研究系列---隐藏Ribbon
企业应用架构研究系列二十八:身份认证 Beginning Out With I...
温森特 · 2022-04-28 · via 博客园 - 温森特

2022-04-28 13:08  温森特  阅读(607)  评论()    收藏  举报

  在.Netcore 技术栈中,一直在使用了开源组件IdentityService4进行身份管理,其功能的强大和易用性的确很受开发者喜欢,但是最近其开源组织Duende Software 开始对其进行商业收费,不得不探索其它的解决方案。个人认为,其实在.NetCore 本身是提供一套基AspNetCore.Identity解决方案的,我们只需按照自己的架构意图进行封装,就可以满足我们各种类型的需求。

  现在动起手来(Beginning Out With IdentityServer4),开发一个满足自己业务系统的Identity 服务替换IdentityServer4。开发一套基于Microsoft.AspNetCore.Identity的Identity 的框架,需要设计一下IdentityUser、IdentityRole和 用于生成JWT 的 Claim。已即对应的验证逻辑和序列化Provider。我们首先看一下Microsoft.AspNetCore.Identity 的设计架构图,如下图所示,它是一个分层次的架构,每个层次有自己的职责。基于这个架构,可以从网上下载很多的开源框架和源码。

  

  但是,今天我们挑战的是一套自己的一套简易的,高适配的框架,因为在项目开发过程中,人员和角色很多情况下,可能已经在现有的第三方平台上都预定义了,我们的系统需要能够更快、更容易的适配这些系统。一个可持续发展的社会需要包容的秩序,软件行业也是如此,我认为一个好的软件架构设计,要有更高的包容性。所以,我们今天设计的Identity 是一个开放的架构,允许适配现有的人员和角色的框架。

  所以,基于职能分离原则,认证组件只负责Token的业务逻辑处理,包括Token 的生成,验证,销毁,以及用RefreshToken进行更新accessToken等功能,而对于持续的Token的序列化工作通过订阅事件的方式由其它模块进行完成,也可以通过接口定义服务,通过注册服务的方式进行分离这块业务。

  

  由于这部分代码比较多,我就把核心的代码和运行测试的效果贴图出来,如果有需要源码的化,可以联系我。

  

  运行效果如下图,生成了目标的JWT格式的token和refreshtoken信息。

  

  

  通过生成的Token,我们调用测试接口,我们就可以进行了认证的验证,同时,由于Token中基于声明式的策略,我们定义了Role,还可以对接口进行基于声明式Role的权限管理,如下图所示,只有包含该角色的Token才能访问该接口。实现了基于netcore 原生的认证和鉴权。后续将继续增加基于netcore 原生的OpenID的支持。

  

  发布完后,有圈内朋友问我,针对于微服务化怎么实现,昨天想了一下,我有做了一些调整,请看下图,通过事件总线将序列化工作与组件进行脱藕,并实现针对高并发的情况进行方案的整合,实现横向扩展。通过一个API数据服务代理,提供Token数据的反向加载。

  

您的支持,我的动力!