SpringSecurity+OAuth2.0的改造|前沿热点
背景
最近,公司的标准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
关键词:
推荐阅读
月壤形成的主要原因 月壤与土壤有什么区别
月壤形成的主要原因月壤形成过程没有生物活动参与,没有有机质,还极度缺水干燥;组成月壤的矿物粉末基本是由陨石撞击破砰形成,因此,粉末 【详细】
域名抢注是是什么意思?投资角度来看什么域名好?
域名抢注是是什么意思域名抢注是通过抢先注册的方式获得互联网删除的域名的使用权。域名是由点分隔的一串数字,用于标记一台计算机或一组计 【详细】
捷达保养费用是多少?捷达是哪个国家的品牌?
捷达保养费用是多少?全新捷达的保修期为2年或6万公里,以先到者为准,新车可享受一次免费保养,首次免费保养在5000-7500km或1年内进行。如 【详细】
天然气泄露会造成爆炸吗?天然气泄漏怎么办?
天然气泄露会造成爆炸吗?家里用的天然气如果泄露是会发生爆炸的。当空气中含有混合天然气时,在与火源接触的一系列爆炸危险中,就会发生爆 【详细】
四部门明确App收集个人信息范围 个人信息保护范围判断标准
四部门明确App收集个人信息范围近日,国家互联网信息办公室、工业和信息化部、公安部、国家市场监督管理总局联合印发《常见类型移动互联网 【详细】
相关新闻
- SpringSecurity+OAuth2.0的改造|前沿热点
- 银川—青岛港“一单制”铁海联运班列首发
- 世界球精选!Avaada获得1070亿印度卢比战略投资
- 【世界热闻】大和:上调国泰航空(00293)评级至“买入” 目标价升至9.3港元
- 2023年全球汽车供应链百强榜单出炉 宁德时代跻身前十
- 逐梦而行 奔赴热爱!安凯房车首发上市
- 6月乘用车销量约185万辆 环比小幅上升
- 岚图汽车持续四个月保持月销超3000辆
- 山东:到2025年培育壮大1000家左右绿色低碳领域高新技术企业 每日资讯
- 全球通讯!吉林:禁毒宣传进万家 助力创建“无毒社区”
- 【天天时快讯】谭雅玲:2023年上半年与下半年总结与预期比较风险
- 环球观速讯丨B站离盈利还有多远
- 《自然》子刊:距离冷冻永生又进一步!《科学》专题报道,科学家找到无损长期冻存器官新方法
- 天天热点!数字化革命:探索人工智能、区块链和大数据的前沿领域
- 环球观天下!人民币对欧元汇率(2023年7月3日)
- 环球动态:黑多黟县怎么读_黑多黟县的读音
- 社保公司交的部分去哪了
- 成立才2年,长宁这家企业便成为上海市“专精特新”企业
- 3维动画制作(关于3维动画制作的基本详情介绍)
- 当前快报:南昌海底捞门店有多少家