技术分享|明源云天际集成开放平台接口中心基于IdentityServer4的鉴权机制


源宝导读:企业数字化生态建设中为解决集成多样性和资源统一管理的痛点引入企业级网关,网关作为资源访问的大门,身份认证鉴权是其业务的重中之重,本文将介绍企业级网关-天际集成开放平台是如何通过IdentityServer4来做到身份认证和鉴权业务的。

天际集成开放平台业务简述

明源云天际集成开放平台(以下简称“集成平台”)是明源打造的一套高可用、高并发、高性能的企业网关,是解决企业数字化生态打造中的资源连接多样性和资源生态管理困难等痛点。企业周边生态复杂多样,各种业务系统层出不穷,给资源的统一管理和连接带来了巨大的挑战。

集成平台采用分布式系统架构,来应对挑战。由接口中心、连接中心、事件中心、门户、监控中心、服务流ETL和方案中心等组成(如图1所示),其中接口中心是系统的统一入口,负责资源的管理,所有的请求都由接口中心来转发处理,其他中心负责其相关核心业务。

结合这次分享的主题,我将对接口中心基于IdentityServer4的鉴权机制进行详细的分享,其他业务将在后续的文章中体现,敬请期待。

(图1)

IdentityServer4 徽标

IdentityServer4 介绍

IdentityServer4框架,是为ASP.NET CORE量身定制的实现了 OpenID Connect 和 OAuth 2.0 的认证授权中间件。

IdentityServer4 官方支持时间和商业许可

IdentityServer4 官方错误修复和安全更新的维护时间直到2022年11月。
IdentityServer4 使用 Apache2 许可的许可证,该许可证允许在其之上构建商业产品。

一、概述

由于接口中心的特殊定位,使其还兼顾着网关相关的安全策略和统一业务处理。在接口中心的设计上选择了.NET生态中一套非常成熟的网关设计方案 Ocelot + Consul + IdentityServer4,集成平台基于自身业务的需要在Ocelot的运行管道中进行了相关中间件的扩展,如图2所示。其中Api鉴权中心中间件的设计便是结合了IdentityServer4相关技术来进行打造的。

集成平台为客户连接一切可连接的资源,用户在将资源进行上线管理时,担忧的是安全问题、访问权限问题。针对这两点,首先我们提供了统一的网关入口,建议用户将资源放在内网,隔绝外网直接访问资源,然后针对需要获取客户资源的第三方用户,提供网关的Token颁发地址,目前我们支持三种获取Token的接口,分别为 JWT(Json web token)、OAuth2.0 Client、OAuth2.0 Sign。在平台上客户会给第三方添加应用,为应用分配AppKey和AppSecret,第三方用户拿到AppKey和AppSecret来请求Token获取令牌。在给第三方应用颁发Token时,会将授权资源信息保存起来,供身份认证通过后,进行资源授权校验,综上所述,如图3所示。

为了更好让大家理解 IdentityServer4 下面将对它进行详细的说明,并结合集成平台的身份认证授权案列来进行阐述。

(图2)

(图3)

二、相关术语解释

① User:用户

② Client:客户端

③ Resources:Identity Data(身份数据)、Apis

④ Identity Server:认证授权服务器

⑤ Token:Access Token(访问令牌)和 Identity Token(身份令牌)

⑥ JWT:Json web token 详情请看JWT官网

三、OAuth2.0和OpenId Connect协议理解

由于OAuth2.0和OpenId Connect协议在网络上,有很多技术文章进行解说了,大家可以自行百度了解,这里简单说下这两种协议的定义和相关点说明。
(一)OAuth 2.0用于授权

定义:OAuth(开放授权)是一个开放标准,目前的版本是2.0。允许用户授权第三方移动应用访问他们存储在其他服务商上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。OAuth允许用户提供一个令牌而不是用户名和密码来访问他们存放在特定服务商上的数据。每一个令牌授权一个特定的网站内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth可以允许用户授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容。

1、OAuth2.0 定义了四种授权模式:

(1)Implicit:简化模式;直接通过浏览器的链接跳转申请令牌。

(A)客户端携带client_id、redirect_uri,中间通过代理者访问授权服务器,如果已经登录过会直接返回redirect_uri,没有登录过就跳转到登录页面

(B)授权服务器对客户端进行身份验证(通过用户代理,让用户输入用户名和密码)

(C)授权通过,会重定向到redirect_uri并携带授权码token作为uri参数

(D)客户端携带授权码访问资源服务器

(E)验证token通过,返回资源

(图4)

(2)Client Credentials:客户端凭证模式,是最简单的授权模式,因为授权的流程仅发生在Client与Identity Server之间。该模式的适用场景为服务器与服务器之间的通信。比如对于一个房地产ERP系统,将房产库存和销售分拆为两个服务分别部署。销售系统需要访问库存系统进行房间的跟踪,库存系统需要访问销售系统的销售单号信息进行房间信息的定时刷新。而这两个系统之间服务的授权就可以通过这种模式来实现。

(图5)

(3)Resource Owner Password Credentials:密码模式相较于客户端凭证模式,多了一个参与者,就是User(资源所有者)。通过User的用户名和密码向Identity Server申请访问令牌。这种模式下要求客户端不得储存密码。但我们并不能确保客户端是否储存了密码,所以该模式仅适用于受信任的客户端。否则会发生密码泄露的危险。该模式不推荐使用。

(图6)

(4)Authorization Code:授权码模式是一种混合模式,是目前功能最完整、流程最严密的授权模式。它主要分为两大步骤:认证和授权。其流程为:

(A)用户访问客户端,客户端将用户导向Identity Server。

(B)用户填写凭证信息向客户端授权,认证服务器根据客户端指定的重定向URI,并返回一个【Authorization Code】给客户端。

(C)客户端根据【Authorization Code】向Identity Server申请【Access Token】

(图7)

(二)OpenId Connect用于授权身份认证

定义:OpenID Connect 1.0 是基于OAuth 2.0协议之上的简单身份层,它允许客户端根据授权服务器的认证结果最终确认终端用户的身份,以及获取基本的用户信息;它支持包括Web、移动、JavaScript在内的所有客户端类型去请求和接收终端用户信息和身份认证会话信息;它是可扩展的协议,允许你使用某些可选功能,如身份数据加密、OpenID提供商发现、会话管理等。

(三)JWT 理解

我们使用的Token格式为JWT(Json web token)。其特殊的三段式结构结合签名的方式,使Token更加的安全和可读(头部和有效载荷都为Base64URl加码)。而且这种类型的Token的特点非常适合Http无状态的方式,让分布式的系统通过Jwt来作为身份和认证的统一令牌,让服务器无状态,无关联影响。

四、集成平台身份认证授权案例

在前言中提到我们在Ocelot网关的管道中扩展很多自己的业务管道,其中就包含了平台的身份认证授权中间件,其实在Ocelot中是有内置的中间件的,为什么我们要自己实现一套中间呢?首先我们作为企业网关,除了要兼容标准的各种验证方式,以及兼容替换其他第三方网关的认证方式,还要结合我们明源自己的软件产品生态,比如兼容云客、云空间的身份认证模式等等,由于Ocelot自身没办法满足我们特殊定制的需要,所以自己实现了一套基于Ocelot管道的身份认证。

IdentityService4作为独立的认证服务,必须要知道哪些资源需要配置和保护,也必须知道哪些客户端被允许访问资源,我们在概述中提到了集成平台的身份认证验证过程图3所示,首先在集成平台的云控制台添加资源,然后根据不同的访问系统创建应用信息并颁发AppKey和AppSecret。资源和应用的对应关系我们实例化在数据库中,并把资源和应用的绑定关系同步在Consul KV中,在调用的时候系统首先获取到Token然后携带Token并来到集成平台网关,通过目前Api请求Token和认证方式,进行Token身份认证,认证通过后将通过Api的唯一标识从Consul KV中获取对应关系,进行授权认证。那数据库中持久化的关系和Consul KV 中的数据怎么保证一致性呢?首先在集成平台云端控制台进行授权配置的时候采用事务的方式来保证数据库和Consul中的数据一致性,并采用Consul 的KV变更监控来防止直接修改信息导致的数据不一致性。下面是集成平台网关相关配置的几个点。

(1) 首先配置允许授权颁发Token令牌接口匿名访问,集成平台目前实现了三种验证方式并提供了获取令牌的接口。

(图8)

如下图,提供的OAuth2.0 客户端的认证模式获取Token接口,会在集成平台的云控平台为需要访问资源的第三方,建立应用并分配可访问资源权限,第三方拿到应用Appkey和AppSecret后进行登录获取Token。

(图9)

如下图:Json web token 颁发的核心代码

(图10)

(2)我们使用Ocelot作为网关,并在Ocelot网关管道中进行业务改造,这里我们也是编排身份验证中间件到管道中。

(图11)

(图12)

(图14)

五、总结

IdentityServer4 实现了OAuth2.0的四种身份认证方案,大家可以结合自己的业务场景,来选择适合系统业务的身份认证授权的方式,集成平台为了兼容多种客户的需求,目前实现了三种不同的验证方式,OAuth2.0客户端模式、JWT认证模式、OAuth2.0签名模式。

在我看来,身份认证和授权的选择,首先考虑自己的系统是无状态还是需要维护登录状态,然后结合业务的场景,考虑身份认证授权方案,最终将选型的方案,添加到管道中进行编排。

六、参考文章

官方

@Identityserver4网站:https://identityserver4.readthedocs.io/en/latest/index.html

@OpenID Connect 网站:https://openid.net/connect/

@OAuth 2.0 网站:https://oauth.net/2/

博客园

@作者 圣杰 文章:IdentityServer 4 知多少 :https://www.cnblogs.com/sheng-jie/p/9430920.html

@IdentityService4 百度脑图 https://naotu.baidu.com/file/75b251257ce27cfa62e0ad7f47b75576?token=e2db617be22b6274

------ END ------

作者简介

顾同学: 研发工程师,目前负责集成平台相关研发工作。

也许您还想看:

技术分享|单元测试推广与实战-在全新的DDD架构上进行单元测试

技术分享|文件预览方案在应用市场的落地

更多明源云·天际开放平台场景案例与开发小知识,可以关注明源云天际开发者社区公众号:

【建模】在线编码--SetProp/GetProp方法使用

明源云·天际硬核技术认可:获华为鲲鹏技术认证书

天际·开发者社区“重装发布”!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式--6大原则--单一职责原则

2019独角兽企业重金招聘Python工程师标准>>> 单一职责原则(Single Responsibility Principle),简称SRP。 定义: There should never be more than one reason for a class to change. 应该有且仅有一个原因引起类的变更…

法国为何是伟大数学家的摇篮?

全世界只有3.14 % 的人关注了青少年数学之旅笛卡尔、韦达、帕斯卡、费马、拉格朗日、拉普拉斯、达朗贝尔、勒让德、蒙日、彭赛列、柯西、傅里叶、庞加莱、伽罗华、格罗藤迪克…… 这些令无数大学生“闻风丧胆”的数学家,基本上都诞生于十七至二十世纪的法国。解析几…

(转)WCF教程系列(1)-创建第一个WCF程序

作为微软技术.net 3.5的三大核心技术之一的WCF虽然没有WPF美丽的外观但是它却是我们开发分布式程序的利器但是目前关于WCF方面的资料相当稀少希望我的这一系列文章可以帮助大家尽快入门下面先介绍一下我的开发环境吧操作系统:windows vista business版本编译器&…

03 Files

本章提要-----------------------------------------------组成 oracle 的 8 种主要文件(包括 instance 和 database)instance: parameter file, trace file, alert filedatabase: data file, temp file, control file, redo log file, password file简单概述:parameter file: …

TensorFlow发布全新版本,又会带来哪些变革?

全世界只有3.14 % 的人关注了青少年数学之旅经过几年的发展,深度学习方法摧枯拉朽般地超越了传统方法,成为人工智能领域最热门的技术。之后,谷歌、亚马逊、百度、Facebook 纷纷开源了自己的深度学习框架。而支撑AlphaGo的核心技术架构--Tenso…

码农身份得到正式认证

各位同行的兄弟姐妹们,我们的码农(新生代农民工)身份已经得到国家正式确认,程序员这个职业也正式并到农民工行列了。现在互联网大厂,大部分程序员都是在做着模式化开发工作,已经没有技术含量了,…

面试字节我被String类的问题给问死了!

“” 是怎么连接字符串的?(JDK1.7及以上) 总结: 使用 “” 连接字符串时,实际上是使用临时创建的StringBuilder对象来辅助完成的。 对于编译时常量,在编译后直接计算出字符串的值,而不会在运行…

加州大学惊现神操作!物理教授用数学论文摆脱400美元交通罚单,却惨被网友大反转.........

全世界只有3.14 % 的人关注了青少年数学之旅“学好数理化,走遍天下都不怕。”这句从上个世纪八十年代流传下来的金句,至今仍然哺育着理工科的莘莘学子。为了让模友们更好的理解这句话,今天就让小天给你们涨涨姿势,见识一下什么是学…

VMware虚拟机VMDK 快照 数据恢复成功

VMware虚拟机VMDK 快照 数据恢复成功【故障描述】某影院使用的票管理系统安装在一台虚拟中,数据库采用的是Oracle9I,虚拟机在安装好后做了一次快照,期间又做过一次快照,在正常使用过程,虚拟突然崩溃,无法启动&#xff…

[转]两个经典的windbg调试案例,值得学习。

1. 调试Bug的神兵利器:通过WinDbg条件断点收集Log 原文地址:http://blogs.msdn.com/yizhang/archive/2009/03/30/bug-windbg-log.aspx 调试Bug的神兵利器:通过WinDbg条件断点收集Log 前段时间花了几天一直在用WinDbg调试一个比较棘手的Bug。…

设计模式之观察者

观察者模式介绍观察者又名事件订阅者、监听者。观察者模式是一种行为设计模式,允许你定义一种订阅机制,可在对象事件发生时通知多个“观察者”该对象的其他对象。通知目标:拥有一些值得关注的状态的对象。发布者:它要自身的状态改…

二面京东被问到Java 反射,我直呼好家伙,这我不是必过吗?

二面京东被问到Java 反射,我直呼好家伙,这我不是必过吗?用多久我会升职加薪、当上技术总监、迎娶漂亮学姐、走上人生巅峰!想想还有点小激动。 好了开始分享面试经历 说说你反射的理解 到底什么是反射呢??…

通用路由封装(GRE)×××配置

本人没有很好的文采,只能直接配置,有不懂的地方,后面可以联系我,在配置当中,我会尽量在配置命令后面加标注。1、在R1上配置相关的命令R1(config)#int fa0/0 ---进入以太网fa0/0接口--R1&#…

gridview DataFormatString

转有个时间要在gridview中显示,但是保持着数据库中的是标准时间,很长,而且只需要显示日期,就想要格式化字符串,可是设置了DataFormatString就是不起作用,后来一查,原来要设置"行为"中HtmlEncode false DataFormatString"{0:格式字符串}" 在DataFormatStri…

太神奇了!使用C#实现自动核验健康码:(1)二维码识别

前言因为疫情的原因,无论是进入商场还是医院、车站,都需要出示健康码。现在基本都是采取人工方式核验健康码,看到绿码就通过,否则就禁止进入。但是,单靠人工核验健康码容易造成人员拥堵,增加病毒交叉感染的…

三角形中惊现叛徒!自己胖的像个球,却能成就世界上最快的赛车引擎......

全世界只有3.14 % 的人关注了青少年数学之旅一日,理科生上山寻访禅师。理科生问禅师:“大师,世人为何总嫌我棱角太突出,不合群!”禅师思索一阵,掏出数根圆柱铺在地上,在上面搁了一块木板&#x…

我丢,去面试初级Java开发岗位,被问到泛型?

1、泛型的基础概念 1.1 为什么需要泛型 List list new ArrayList();//默认类型是Objectlist.add("A123");list.add("B234");list.add("C345");System.out.println(list);for(int i0;i<list.size();i){//若要将list中的元素赋给String变量&a…

echart 地图 某个地区_中国饮食地图来袭!你爱的口味暗藏健康隐患吗?

食&#xff0c;既是人生存之根本&#xff0c;也是人们热爱生活的体现。中国地域广阔、物产富饶&#xff0c;中国人对“吃”看重也愿钻研&#xff0c;种种因素造就了中国美食 “百花齐放”的局面&#xff0c;在“吃货”眼里&#xff0c;中国地图俨然就是一张美食地图。不同地区的…

面试官:实现一个带值变更通知能力的Dictionary

如题&#xff0c; 你知道字典KEY对应的Value什么时候被覆盖了吗&#xff1f;最近大家都在追.Net6 update&#xff0c;咱还是保持节奏&#xff0c;通用语言聊技术。没背景说个铲铲上文中 数据获取组件维护了业务方所有(在用)的连接对象&#xff0c;DBA能在后台无侵入的切换备份库…

颠覆认知!完美赌徒,到底是如何用数学打造经济神话?!

▲ 点击查看说起世界上最会赚钱的数学家&#xff0c;非詹姆斯西蒙斯莫属。1938年&#xff0c;西蒙斯出生于美国的马萨诸塞州&#xff0c;是一个鞋厂的儿子。在其他的孩子&#xff0c;还在听童话故事的时候&#xff0c;西蒙斯就已经开始展露出惊人的数学天赋了。3岁的时候&…