背景
最近,公司的标准B端产品,遇到了两个客户的定制化需求:
1.A客户公司要求产品需要集成他们的单点登录,客户还提出来,他们今年没有这方面的预算,要求自己在我们的源码基础上二开。
【资料图】
2.B客户公司说他们集团有要求,产品都需要集成双因子认证登录的功能,同样他们登录也要求接入他们的用户中心。
我们的产品登录认证是基于# SpringSecurity+OAuth2.0。
看起来登录认证,接入客户的用户中心这个场景在安全的大背景下,是一个普遍的需求场景了,遂纳入了迭代版本,同时考虑到后续版本升级及维护成本,进行统一的设计,留好接口,做到良好的代码隔离及扩展。
我的工作思路
1.接到这种需求,首先第一考虑的当然是搜索,github上找现成方案,hahah,没错,面相搜索的编程原则不能丢,用经过别人实践的方案,或者是这个模块的通用解决方案,不用自己想歪招~
2.当我查了半天,发现S# SpringSecurity+OAuth2.0原理解释的文章一大堆,但是真正关于这两个需求相关的方案很少,仅有的几篇要么写的不清楚,要么不是我想要的,无奈还是得自己调研,做方案设计。
tips:
SpringSecurity+OAuth2.0我只是以前作为学习了解过,最多写过demo,之前没有负责过登录模块,并且好几年了,也只是了解写概念和基本流程,并不足以支撑我进行方案设计和基SpringSecurity+OAuth2.0的改造。那就只能重新回顾原理去了。
这里为什么说不足以支撑我做方案设计呢,我个人认为SpringSecurity+OAuth2.0的方案,框架封闭程度太高了。
几个概念
1.OAuth2.0
2.SpringSecurity+OAuth2.0
3.单点登录
这几个概念比较普遍了,不知道的也可以网上搜一下,都写的比较透彻了。
4.双因子登录可能有些人不太清楚,这里重点说一下:
其实这也不是新概念了,早年的银行U盾+用户名密码也是双因子的一种。 就举个现在C端常用的例子吧:
正常你可能用户名+密码就完成了登录,但是当你某一天去外地出差,在输入用户名密码后,跳转到了另一个页面要求你用短信验证码做二次认证,大概就是这么个场景。概括的说:在系统基于大数据识别到风险或者异常行为,开启第二种登录认证方式。
谈谈我的设计方案
根据需求背景,那我希望的是:
1.三方登录集成:
SpringSecurity的用户名密码认证,可以基于策略模式,来实现。(基于本地的密码认证策略,三方接口接入的)
2.双因子登录:
在用户请求登录时,增加预校验接口,先校验是否需要双因子认证,如果不需要,则直接加载密码授权模式办法token,如果需要,则先不能办发token,再增加一个自定义的grant_type,来进行短信验证码的授权模式,并颁发token。
目标出发,再看oauth2.0的工作及实现原理
由于原来的实现是授权码模式(authorization code),那我们来看他的工作流程及原理:
我们画出他的时序图:
集成三方登录
从上述时序图来看,这个需求,我们关键是关注下述这个地方:
他的密码认证的核心逻辑在DaoAuthenticationProvider类的additionalAuthenticationChecks方法
接下来,我决定重写该类的additionalAuthenticationChecks方法,这样就能满足我的想法,同时原来的代码结构不用破坏,权限等的加载逻辑也都不用动。
我的具体实现方案
自定义重写additionalAuthenticationChecks方法
基于策略模式实现不用认证方式的加载
加载自己的CustomLoginAuthProvider
SecurityConfigurer中加入自己的configure
tips: 这里有个小坑,mark一下,我还查了好就:
双因子登录
还是根据调用的时序图来看:
关于授权类型 grant_type 的解析
1.每种 grant_type 都会有一个对应的 TokenGranter 实现类。
2.所有 TokenGranter 实现类都通过 CompositeTokenGranter 中的 tokenGranters 集合存起来。
3.然后通过判断 grantType 参数来定位具体使用那个 TokenGranter 实现类来处理授权。
关于授权登录逻辑
1.每种 授权方式 都会有一个对应的 AuthenticationProvider 实现类来实现。
2.所有 AuthenticationProvider 实现类都通过 ProviderManager 中的 providers 集合存起来。
3.TokenGranter 类会 new 一个 AuthenticationToken 实现类,如 UsernamePasswordAuthenticationToken 传给 ProviderManager 类。
4.而 ProviderManager 则通过 AuthenticationToken 来判断具体使用那个AuthenticationProvider 实现类来处理授权。
5.具体的登录逻辑由 AuthenticationProvider 实现类来实现,如 DaoAuthenticationProvider。
基于以上我这里实现了单独的SmsGranter
-
即时焦点:SpringSecurity+OAuth2.0的改造TokenGranter类会new一个AuthenticationToken实现类,如UsernamePasswordAuthent
-
插入图表怎么设置纵坐标轴和横坐标轴(插入图表)入图表怎么设置纵坐标轴和横坐标轴,插入图表这个问题很多朋友还不知道
-
宝马i5旅行版曝光:外观圆中带方 10月上市据报道,宝马的5系列新款纯电动旅行车即将上市,新车有望命名为宝马i5T
-
广州演唱会在哪里举办_2013传奇中国广州演唱会相关内容简介介绍_世界今日报12月21日晚“传奇中国演唱会”将在广州天河体育中心上演。王杰、张信哲
-
乳胶漆多久可以入住的(乳胶漆多久可以入住)一、乳胶漆多久可以入住乳胶漆施工后的一个月左右就可以考虑入住事宜了
-
苹果官网学生价优惠多少(苹果有内部员工价吗)苹果内部员工买苹果手机是可以打折的。自2020年1月起,苹果将为AppleSt
-
星汉灿烂越妃扮演者(星汉灿烂阿璃的扮演者)你说的应该是《星汉灿烂》里的楼缡,她的扮演者是汤梦佳,1999年参演《
-
热推荐:蕾哈娜回家乡养胎,光脚逛街!孕肚撑开短裙扣子,预产期喝冰饮近日,天后蕾哈娜荣归故里,回到巴巴多斯安心养胎,所谓一方水土养一方
-
大行评级|高盛:下调舜宇光学科技目标价至90港元 评级“中性”格隆汇7月3日丨高盛发表研究报告指出,虽然5月份智能手机出货量表明智
-
中银航空租赁(02588.HK):David Walton退任副总经理兼首席运营官-简讯中银航空租赁(02588)发布公告,DavidWalton已从公司副总经理兼首席
-
2023年“美美观山湖·文化旅游节”开幕-每日资讯开幕式现场7月2日晚,2023年“美美观山湖·文化旅游节”开幕式在贵阳市
-
歌尔股份净利润暴跌7成,与苹果渐行渐远的山东富豪如何过冬? 每日时讯歌尔股份净利润暴跌7成,与苹果渐行渐远的山东富豪如何过冬?,姜滨,山
-
世界新动态:怎么知道对方把我微信拉黑了 怎么知道对方把我微信拉黑了怎么挽回1、打开微信,点击微信好友进入。2、在输入框输入信息发送,会提示消息
-
预留名额?内部指标?这些高考招生骗局别再上当了近期,全国各地陆续公布高考成绩,高招录取工作也随之展开,今天我们要
-
千名港澳青年赴浙江参访 携手同心共享发展机遇(郭其钰 鲍梦妮)“同心迎亚运·携手向未来”港澳青年浙江行活动3
-
银行间回购定盘利率全线下跌 天天时讯银行间回购定盘利率全线下跌。FR001跌个基点报%;FR007跌个基点报%;FR
-
金源博:1910支撑起涨,美盘再次考验1920_速讯今日两次做多的机会分别是早盘1914位置和欧盘1910位置。早盘1914多单在
-
银行财眼|违反反洗钱等多项规定 云南西山北银村镇银行被罚56.2万银行财眼|违反反洗钱等多项规定云南西山北银村镇银行被罚56 2万
-
向 RAZER 靠拢?三星要搞游戏硬件竞备赛三星近日宣布,计划在全球30多个国家的Samsung com上开设专门从事游戏
-
【时快讯】等额本息月供怎么算的?等额本息知道月供反算利率等额本息月供怎么算的,我们一起来看看。首先,贷款期限越长,每个月还
-
联想A668t(联想a668t)-即时焦点来为大家解答以上问题,联想A668t,联想a668t很多人还不知道,现在让我
-
诺基亚c5 00i跑分(诺基亚c5 05) 世界观点1、诺基亚C5-05的处理器是600MHz单核。2、Hi!中国内地上市的C5-05手机
-
横版动作游戏波斯王子失落的王冠将于2024年1月18日正式发售据了解,育碧公司研发的横版动作游戏《波斯王子:失落的王冠》将于2024
-
北京海淀警方通报“人大部分学生信息被非法获取”央视网消息:据@平安北京海淀微博通报,针对“中国人民大学部分学生信
-
圣泉集团最新公告:控股子公司新三板挂牌申请获受理 天天热头条圣泉集团公告控股子公司尚博医药于6月30日收到全国中小企业股份转让系
-
全球要闻:合武高铁进度如何?安徽省发改委回复据安徽发改委网消息,针对网友提出的合武高铁进度问题,近日,安徽省发
-
西皮二黄是什么意思(西皮二黄)导读1、西皮”和“二黄”本是两种不同的声腔。2、如果从调式、调性、旋
-
天天热门:大暑节气的含义是什么?小暑节气快到了,“暑”是炎热的意思,大暑,指炎热之极。大暑节气的含
-
联动科技:6月30日融资买入889.76万元,融资融券余额7631.08万元 焦点快报6月30日,联动科技(301369)融资买入889 76万元,融资偿还662 45万元
-
人保金色前程教育年金保险保障什么?可靠吗? 当前看点人保金色前程教育年金保险旨在为孩子的教育提供全方位的保障。首先,该