统一授权认证架构设计及实现dreamw

白话文的意思就是:你需要用身份证证明你自己是你自己。

比如我们常见的认证技术:

在现实生活领域:门禁卡需要通过门禁卡识别器,银行卡需要通过银行卡识别器;

在互联网领域:校验session/cookie/token的合法性和有效性

权限控制(Access/PermissionControl)将可执行的操作定义为权限列表,然后判断操作是否允许/禁止

对于权限控制,可以分为两部分进行理解:一个是权限,另一个是控制。权限是抽象的逻辑概念,而控制是具体的实现方式。

在现实生活领域中:以门禁卡的权限实现为例,一个门禁卡,拥有开公司所有的门的权限;一个门禁卡,拥有管理员角色的权限,因而可以开公司所有的门。

在互联网领域:通过web后端服务,来控制接口访问,允许或拒绝访问请求。

需要说明的是,这四个环节在有些时候会同时发生。例如在下面的几个场景:

在HTTP中,基本认证方案(BasicAccessAuthentication)是允许客户端(通常指的就是网页浏览器)在请求时,通过用户提供用户名和密码的方式,实现对用户身份的验证。

因为几乎所有的线上网站都不会走该认证方案,所以该方案大家了解即可

(1)客户端(如浏览器):向服务器请求一个受限的列表数据或资源,例如字段如下

GET/list/HTTP/1.1Host:www.baidu.comAuthorization:BasicaHR0cHdhdGNoOmY=

(2)服务器:客户端你好,这个资源在安全区baidu.com里,是受限资源,需要基本认证;

其中Basic就是验证的模式,而realm="baidu.com"说明客户端需要输入这个安全域的用户名和密码,而不是其他域的

HTTP/1.1401Unauthorizedwww-Authenticate:Basicrealm="baidu.com"

(3)客户端:服务器,我已经携带了用户名和密码给你了,你看一下;(注:如客户端是浏览器,那么此时会自动弹出一个弹窗,让用户输入用户名和密码);

输入完用户名和密码后,则客户端将用户名及密码以Base64加密方式发送给服务器

传送的格式如下(其中Basic内容为:用户名:密码的ase64形式):

GET/list/HTTP/1.1Authorization:BasicKsid2FuZzp3YW5n==

(4)服务器:客户端你好,我已经校验了Authorization字段你的用户名和密码,是正确的,这是你要的资源。

成功:HTTP/1.1200OK失败:HTTP/1.1403Forbidden

2.3.1优点

实现简单,基本所有流行的浏览器都支持

2.3.2缺点

(1)不安全:

(2)无法主动注销:

由于HTTP协议没有提供机制清除浏览器中的Basic认证信息,除非标签页或浏览器关闭、或用户清除历史记录。

内部网络,或者对安全要求不是很高的网络。

Session-Cookie认证是利用服务端的Session(会话)和浏览器(客户端)的Cookie来实现的前后端通信认证模式。

在理解这句话之前我们先简单了解下什么是Cookie以及什么是Session?

3.1什么是Cookie

众所周知,HTTP是无状态的协议(对于事务处理没有记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息);

所以为了让服务器区分不同的客户端,就必须主动的去维护一个状态,这个状态用于告知服务端前后两个请求是否来自同一浏览器。而这个状态可以通过Cookie去实现。

特点:

3.2什么是Session

Session的抽象概念是会话,是无状态协议通信过程中,为了实现中断/继续操作,将用户和服务器之间的交互进行的一种抽象;

具体来说,是服务器生成的一种Session结构,可以通过多种方式保存,如内存、数据库、文件等,大型网站一般有专门的Session服务器集群来保存用户会话;

原理流程:

与Cookie的差异:

看到这里可能就有人想到了,Session-Cookie是不是就是把Session存储在了客户端的Cookie中呢?是的,的确是这样的,我们接着往下看

3.3Session-Cookie的认证流程图

3.4Session-Cookie认证步骤解析

注:可以使用签名对sid进行加密处理,服务端会根据对应的secret密钥进行解密(非必须步骤)

3.5Session-Cookie优缺点对比

优点

缺点

3.6使用场景

现在我们已经得知,Session-Cookie的一些缺点,以及Session的维护给服务端造成很大困扰,我们必须找地方存放它,又要考虑分布式的问题,甚至要单独为了它启用一套Redis集群。那有没有更好的办法?

那Token就应运而生了

Token是一个令牌,客户端访问服务器时,验证通过后服务端会为其签发一张令牌,之后客户端就可以携带令牌访问服务器,服务端只需要验证令牌的有效性即可。

一句话概括;访问资源接口(API)时所需要的资源凭证

一般Token的组成:

Token的认证流程图:

Token认证步骤解析:

Token的优点:

Token的缺点:

业务接口用来鉴权的Token,我们称之为AccessToken。

为了安全,我们的AccessToken有效期一般设置较短,以避免被盗用。但过短的有效期会造成AccessToken经常过期,过期后怎么办呢?

另外一种办法是:再来一个Token,一个专门生成AccessToken的Token,我们称为RefreshToken;

RefreshToken的认证流程图:

RefreshToken认证步骤解析:

4.3Token和Session-Cookie的区别

Session-Cookie和Token有很多类似的地方,但是Token更像是Session-Cookie的升级改良版。

如果你的用户数据可能需要和第三方共享,或者允许第三方调用API接口,用Token。如果永远只是自己的网站,自己的App,用什么就无所谓了。

5、OAuth2.0认证方案

5.1OAuth2.0定义

5.2OAuth2.0角色

(A)资源拥有者(RO)(B)客户端(Client)(C)资源服务器(RS)(D)授证服务器(AS)。

5.3OAuth2.0认证流程

5.3.1、OAuth2.0流程图

关键步骤:

说明备注:

5.3.2、隐式许可模式

所有步骤在浏览器中完成,令牌对访问者是可见的,且客户端不需要认证。

5.3.3、密码凭证模式

密码凭证模式(ResourceOwnerPasswordCredentialsGrant)中,用户向客户端提供自己的用户名和密码。

5.3.4客户端凭证模式

(A)客户端向认证服务器进行身份认证,并要求一个访问令牌。(B)认证服务器确认无误后,向客户端提供访问令牌。

备注说明:

6、JWTToken验证

我们知道了Token的使用方式以及组成,我们不难发现,服务端验证客户端发送过来的Token时,还需要查询数据库获取用户基本信息,然后验证Token是否有效;

这样每次请求验证都要查询数据库,增加了查库带来的延迟等性能消耗;

那么这时候业界常用的JWT就应运而生了!!!

6.2JWT的组成

JWT由三部分组成:Header头部、Payload负载和Signature签名

它是一个很长的字符串,中间用点(.)分隔成三个部分。列如:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Header头部:

在Header中通常包含了两部分:

{"alg":"HS256","typ":"JWT"}

Payload负载:

除了官方字段,你还可以在这个部分定义私有字段,下面就是一个例子。

{"sub":"1234567890","name":"JohnDoe","admin":true}

Signature签名

Signature部分是对前两部分的签名,防止数据篡改。

首先,需要指定一个密钥(secret)。这个密钥只有服务器才知道,不能泄露给用户。然后,使用Header里面指定的签名算法(默认是HMACSHA256),按照下面的公式产生签名。

HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret)

JWT加密、解密标例

客户端收到服务器返回的JWT,可以储存在Cookie里面,也可以储存在localStorage。

此后,客户端每次与服务器通信,都要带上这个JWT。你可以把它放在Cookie里面自动发送,但是这样不能跨域,所以更好的做法是放在HTTP请求的头信息Authorization字段里面。

Authorization:Bearer

其实JWT的认证流程与Token的认证流程差不多,只是不需要再单独去查询数据库查找用户用户;简要概括如下:

优点:

缺点:

我们集团内部有很多个业务系统包括(三大体系:职能、制造、营销):

职能系统:OA系统、商旅系统、财务系统、培训系统、BPM、ERP;

制造系统:MES、MLP、MOM、MSCS、WCC、MTCS、TIMS、SRM、WMS、PLM、......

营销系统:用户中心、设计软件、客服400系统、客情调查问卷、订单系统,账号系统、活动系统、促销系统、会员系统、CRM、电商引流、营销补贴、学习培训、传单系统等各种独立的业务中台和数据中台共有60多个子系统。

1、集团内部已经有非常多个子系统,算下来大大小小有130多个子系统;

3、关键难搞的是只要涉及到财务和生产制造系统,保持系统稳定的指标压倒其他一切;

4、营销体系的各个系统相对比较新,采用Oauth2协议认证,实现营销体系内部统一认证。

7.1集团认证方案设计

7.1.1早期基于CAS集成SSO服务

整体逻辑概图

①用户请求访问业务系统。

②业务系统在系统中查看是否有对应请求的有效令牌,若有,则读取对应的身份信息,允许其访问;若没有或令牌无效,则把用户重定向到统一身份认证平台,并携带业务系统地址,进入第③步。

③在统一身份认证平台提供的页面中,用户输入身份凭证信息,平台验证此身份凭证信息,若有效,则生成一个有效的令牌给用户,进入第④步;若无效,则继续进行认证,直到认证成功或退出为止。

④用户携带第③步获取的令牌,再次访问业务系统。

⑤业务系统获取用户携带的令牌,提交到认证平台进行有效性检查和身份信息获取。

⑥若令牌通过有效性检查,则认证平台会把令牌对应的用户身份信息返回给业务系统,业务系统把身份信息和有效令牌写入会话状态中,允许用户以此身份信息进行业务系统的各种操作;若令牌未通过有效性检查,则会再次重定向到认证平台,返回第③步。

通过统一身份认证平台获取的有效令牌,可以在各个业务系统之间实现应用漫游。

sso的实现技术点:

1)所有应用系统共享一个身份认证系统。

2)所有应用系统能够识别和提取ticket信息

基于CASPC端认证流程时序图

下面对每个场景做单独阐述

二、移动端的认证方式,(Android、iOS)原理是一样的,移动端在本地是有一个小型的关系数据库,叫做sqllite,不过这个关系数据库比较小,就像一个文件夹似的内置,因为移动端本身并没有像我们web端的cookie机制,所以我们使用这个sqlite作为票据存储。

基于CAS移动端认证流程时序图

工作步骤如下:

2、认证通过、返回tgt,然后本地存储这个tgt

3、请求st、并且以上一步请求到的tgt作为参数

4、sso服务器返回st

5、移动端访问业务系统,并且携带st作为参数

6、业务系统接收到请求,会向sso服务器校验st是否有效

基于CAS关键类图

基于CAS集成存在的问题:

1、移动端集成起比较复杂和繁琐。

2、在实际生产使用过程当经常出现tgt串号的问题,多次被业务方投诉。

3、性能问题,随着接入系统越来越多,认证中点不堪其负,出现压力故障。

7.1.2基于OAuth2集成认证中心

营销体系与其他外部的集成示例

营销体系Oauth2认证方案

1、用户客户端所有请求都先经过网关gateway(如前后端分离设计的API请求);

3、用户发起API请求,先经过网关系统token验证,通过才能进入下一步;

4、网关通过后,拿accessToken调用鉴权服务请求鉴权,鉴权通过,转发到真正的业务服务去;

5、业务服务返回API请求结果。

7.2关键问题

集团内部CAS单点与营销系统Oauth2.0认证内部打通隧道建立互信机制。

3、用户在任意一个体系注销,两边系统都会互发一次消息通知。

7.3核心代码实现

1、通过本文,我们可以全面系统学习认证体系的原理和设计方案;

THE END
1.3分钟,教你如何在WhatsApp企业账户上快速积累用户/粉丝如果企业有自己的APP,在用户登录APP后的默认页面,增加一个弹窗提醒用户,点击按钮订阅WhatsApp企业账户。 App内弹窗提示 //邮件签名设计WhatsApp入口// 企业可以给员工、客服专员在邮件签名处做统一的设计,添加企业的wa.me链接或WhatsApp号码。 邮件签名设计WhatsApp入口 //在呼叫中心IVR系统中植入WhatsApp入口//https://m.cifnews.com/article/81307/
2.EC6个性签名设计套装指南EC6个性签名设计套装的设计入口已正式上线。 2020年8月10日(含)前支付大定购买EC6,可免费获赠价值4,500元的个性签名设计套装。我们将在你支付大定后,自动为你添加选装及相应的折扣。 8月10日(含)前支付EC6大定的用户,可以在完成选号后,开始设计签名;8月11日之后,选装了个性签名套装的EC6用户,在支付了意向金http://app.nio.com/app/web/v2/content/506970
3.签名LOGO设计免费生成器签名LOGO免费设计在线生成标智客签名LOGO在线设计软件为企业在线生成签名LOGO图片,提供签名品牌标志生成模板、签名标志图片素材下载,是LOGO免费在线生成平台!https://www.logomaker.com.cn/logo/tag/5740/
4.在线签名设计免费版在线艺术签名设计这款在线艺术签名设计软件融入了多种字体风格,通过我们对字体的重新优化设计与组合,让它达到对签名设计需求的更高要求,比如笔画连接更自然,笔锋更精细,字体文件大小优化让生成更快,用户体验更好等,如果你觉得设计出来的签名效果很满意就赶紧收藏哦。 更多款式:签名设计http://www.uustv.com/
5.QQ志乐园专注分享各类头像个性签名网名签名 [我一直以为最糟糕的情况是你离开我 其实最令我难过的 是你不快乐.] 走自己的路不管后面跟了多少条狗 [ 闲暇时便逗弄 热闹喧嚣便不见联系 前路苍茫 纵使知晓你意 我不愿再不见 ] :如果一个男人真爱你,永远不会丢下你,不管情形有多难。 如果你一直心疼,说明你一直在爱,什么时候麻木了冷漠了,那么,才http://www.qqzhi.com/
6.金蝶云·星空问题描述:单据编号和单据名称,默认值 解决方案:单据编号可以设置自动生成,路径:【基础管理】》【基础资料】》【编码规则列表】中 找到入口单据(如“PLM审核问题描述:打开进去是可以看到版本 解决方案: 看了下设计BOM里面的制造BOM是基础资料字段,可以显示BOM版本简称和BOM版本 可以这么操作,添加一个基础资料属性字段https://vip.kingdee.com/article/403958859930394368
7.15个产品细节剖析,让你看看大厂是如何做设计的!优设网在喜马拉雅的个人设置页面,可以录制一段语音作为签名,系统提供了部分文案语录参考,录制完成并选择性别后,其他用户就可以在我的个人主页收听语音签名了。 2. 设计思考: 从我们最早玩的 QQ 开始,一直到现在,在很多应用里,用户都喜欢用一句话设置个性签名。有人说,个性签名是自己对每个阶段的一种感受,其实也不仅仅如此https://www.uisdc.com/product-details
8.开业活动方案推荐准备大型签名板,要求项目所有进驻商家在签名版上签上自己经营的品牌名和姓名。签名板主题为:“作人经商,诚信为本”。签名板对外展示。 3、文艺表演: 活动期间,每天上午,聘请江华或永州知名的文艺表演团队,在项目入口广场现场搭台,为江华人民献上一场精彩的文艺表演,节目类型涵盖歌舞、曲艺、小品、魔术等。 https://www.yuwenmi.com/fanwen/huodongfangan/4104794.html
9.电子商务应用论文15篇所以任务的选择要根据学生已具备的知识结构,以及课程需要掌握的主要知识点来进行设计,这样才能使学生通过实施任务将新的知识融入到旧的知识中,并构建新的.知识结构,牢固掌握所学知识。同时,在任务设计时还要考虑任务的层次性,也就是说要考虑学生能力的差异,让每个学生都能根据自己的能力选择适当的工作,参与到完成任务https://biyelunwen.yjbys.com/fanwen/dianzixinxigongcheng/733135.html
10.西湖景区北入口建设工程概念性方案设计竞赛公告二、项目概况及主要设计任务 1.建设规模及功能定位 西湖景区北入口建设工程拟对青少年宫地块进行改造,拆除或改造现有建筑,建设地下停车场,地面以游客服务中心为主。项目总投资限额为3亿元。 2.项目地点 项目位于青少年宫地块(北侧为下角东路,南侧为平湖,西侧为祝屋巷及元妙观),占地面积约1.8万平方米。现状青少年宫建筑http://www.huizhou.gov.cn/zfxxgkml/hzsszylswzx/qt/tzgg/content/post_5081710.html
11.签名设计免费版app签名设计免费版下载签名app介绍 签名app,一般又称签名设计免费版,爱签名app。 签名,让你爱上自己的签名。专业的签名字体设计,真人大师在线为你手写签名,个性字体定制属于的签名设计,彰显您个人的非凡魅力。一款彰显个性、别具特色的签名,不仅仅能增加您的自行,还能给人留下深刻的印象亦或是别人的青睐,就像新居的装修设计,签名也能凸显https://www.liqucn.com/rj/1133282.shtml
12.简述网关的作用与设计网关作为流量的入口,是追踪用户操作的入口,因而从网关打印访问日志,建立访问日志搜索,从访问日志追踪链路是一项对于研发提升排查问题效率的重要手段。对于链路追踪的建立,业界中受到Google Dapper论文影响最大,后续随着标准规范的发展,链路追踪逐渐遵循OpenTracing的标准,OpenTracing 是一个中立的(厂商无关、平台无关)分布式追https://m.elecfans.com/article/2072451.html
13.最详细的Android面试题分享前端问答在Android开发中,不管是插件化还是组件化,都是基于Android系统的类加载器ClassLoader来设计的。只不过Android平台上虚拟机运行的是Dex字节码,一种对class文件优化的产物,传统Class文件是一个Java源码文件会生成一个.class文件,而Android是把所有Class文件进行合并、优化,然后再生成一个最终的class.dex,目的是把不同classhttps://www.php.cn/faq/457076.html
14.绿化植树方案(精选12篇)6、各组组长带领组员到签名区,进行绿色签名。 7、市政公益环保:由各组长带领组员,从小区周围进行市政公益环保,例如:捡绿化带中的垃圾等。 8、植树环节:各组组长将组员带至小区,领取树种及工具后,将本组组员带到相应的栽树地点(幼儿园小朋友的父母安排至儿童设施处栽树,便于日后小朋友经常去看管自己的小树)进行植https://www.unjs.com/fanwenku/295614.html
15.超全Java知识总结:网络OSJVM并发数据库。。TCP 提供全双工服务,允许通信双方的应用进程在任何时候发送数据。TCP 连接的两端都有发送缓存和接收缓存:发送时,应用程序把数据传送给 TCP 缓存后就可以做自己的事,TCP 在合适的时候发送;接收时,TCP 把收到的数据放入缓存,应用程序在合适的时候读取。 https://acm.nowcoder.com/discuss/505106
16.环保活动方案(精选15篇)环保志愿者签名,为志愿者系绿丝带(各学校学生、社会公众等)12:00―12:10为广大热爱环保的市民发放绿色购物布袋。(具体图案如下: 四、活动注意事项: 1、此次活动上午9点40分开始布置舞台,请各位志愿者准时到达广场帮忙布置. 2、参加活动的志愿者要维持现场秩序,确保观众及自己的'人身安全. https://www.jy135.com/huodongfangan/1435219.html
17.多措并举提高信息报送质量(精选9篇)“好记性不如烂笔头”,我们要求每位学生自己用心经营一本笔记本。目的是让学生清晰地记录下每单元的重点和难点,使他们能抓住重点,突破难点。 3、一套精心设计的习题。 一套有效的习题,能起到事半功倍的效果。为此,英语老师们应对学生薄弱环节进行精心编题,便形成一套小习题集,让学生们在不断地练习中进步。 https://www.360wenmi.com/f/filec1l9klk9.html
18.操作系统的可扩展访问控制在将访问控制应用于第三方应用程序时数字签名的重要性。 关于基于名称和基于标签的访问控制的紧张关系。 4.1新的设计原则 考虑到与MAC框架的广泛实践,有如下几个新的设计原则: 策略的owner确定自己的性能、功能和保证权衡。策略可能不需要重量级的基础设施(例如标签),因此提供了较好的性能。 https://www.51cto.com/article/760480.html
19.北京保利2023秋拍,多线共叙,引领收藏回归艺术本真签名: S.Y 95(正面);《大风景—秋塬》尚扬 Shang Yang 1995 (背面) 二级市场稳健上涨的尚扬作品已被视为硬通货般的存在。继今年春拍尚扬的《当年长工》在北京保利以920万元领衔成交后,此次秋拍再接再厉呈现艺术家另一经典“大风景”系列《大风景—秋塬》,他以其独有的“百纳布体”塑造出一座山峦,结构零碎http://www.99ys.com/home/2023/12/11/09/216374.html