XX移动非法票据问题的处理方案分享

2024-02-21 12:10

本文主要是介绍XX移动非法票据问题的处理方案分享,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.问题描述
IAM的集中认证服务CASP为了提高处理性能,引进了JCS缓存机制,设计初期CASP服务由于实际部署结构简单(一般是单机部署),JCS缓存机制的可以满足使用场景。随着项目的逐步发展,IAM的用户量越来越大,CASP的认证压力也越来越大,因此项目部署结构需要升级成多机分布式,用于满足这种不断提高的性能要求,分布式部署结构的弊端导致了JCS缓存数据的分离,对于认证的核心票据就没有办法集中管理。
为了解决核心业务票据的分布式问题,CASP增加了票据转发处理的机制,间接的实现了票据的共享,但是在票据转发的过程中由于代码处理逻辑不当,导致票据的转发无法正常验证通过,部分用户单点登录资源不成功,提示“非法票据”。

序号

概念

全称

中文描述

  1.  

JCS缓存

 

本机缓存

  1.  

身份根票据

 

用户身份凭证

  1.  

单点登录票据

 

携带根票据的传输票据

  1.  

CASP票据生成

 

 

  1.  

CASP票据转发

 

20008端口

  1.  

CASP票据验证

 

 

  1.  

负载均衡服务

 

F5

  1.  

应用单点登录

 

携带票据单点登录票据到第三方应用系统

2    问题拆解分析
运用管理工作中的5W1H来具体描述:
2.1    What 发生了什么
2.1.1    身份与票据的关系
用户经过认证成功登录进入IAM后,在用户会话Session中保存了当前用户的身份信息(根票据),用户登出IAM后根票据自动回收。根票据存在于运行时用户的整个生命周期里,作为用户合法身份的凭证。
 
2.2    Who 谁执行的操作
用户主帐号,根票据身份的主人。
2.3    When 什么时间发生异常
IAM正常登录后,根票据保存在会话缓存中,正常情况IAM内部是不需要再次验证用户身份的,当用户发起单点登录,跳转到三方应用系统的时候,根据认证规范,需要对用户的身份做合法性校验。
2.4    Where 在哪里发生的异常
IAM正常登录后,生成根票据并缓存,只有在跳转到第三方系统的情况下,第三方系统内部为了放行用户登录,需要回到CASP验证根票据,从而验证用户的合法身份。。
跳转到三方系统的时候,先将根票据封装成单点登录票据进行传输
 
三方系统接收到单点登录票据字符串后,经过四步处理
参见下图第四步
 
2.5    Why 为什么会出现非法票据
CASP单机部署,就不存在这个问题。
因为大型项目中CASP采用分布式架构部署,但是票据的JCS缓存都是在CASP各自的主机,并没有集中管理,导致无法共享验证票据;后来引入了转发票据的机制,转发的依据就是构造根票据的时候缓存在票据对象中的CreateServerIP值,整个问题就发生在转发票据请求的过程中,根票据没有被转发到生成它的CASP主机,导致无法验证,所以出现了非法票据。
2.5.1    票据的缓存和CASP的部署

2.6    How 怎样发生的
用户主帐号进行单点登录,请求携带单点登录票据到第三方系统,第三方系统请求F5负载IP,负载分发到随机一台CASP来验证用户身份,对比票据携带的IP不是本机生成的根票据的时候,就会立刻转发,此时对比解析出来的IP如果是0.0.0.0,就会无限循环连接本机20008端口,直到自占用到资源耗尽,并且导致其他CASP请求本机20008端口票据验证也不通过,陷入死循环,验证票据服务瘫痪,一旦有请求发过来,就直接非法票据。
3    问题定位
3.1    正常的票据转发过程
下图为举例,详见代码
 
 


 


3.2    发现定时炸弹0.0.0.0
 
 
 


CASP启动过程中,得到本机IP(localAddr)的逻辑没有经过项目上多种情况的验证,会导致出现null的情况,这时在使用本机IP拼装到根票据的时候,就没有可以使用的值,系统默认使用了0.0.0.0,0.0.0.0就像一个危险的定时炸弹,一旦抛出,就循环占用本机的20008端口,当前请求无限循环,并且也占用了其他设备请求当前CASP验证票据的资源。
网上的解释:
一个非常特殊的IP:0.0.0.0
这个IP相当于java中的this,代表当前设备的IP。

严格说来,0.0.0.0已经不是一个真正意义上的IP地址了。
它表示的是这样一个集合:
1、所有不清楚的主机和目的网络。这里的“不清楚”是指在本机的路由表里没有特定条目指明如何到达。
2、对本机来说,它就是一个“收容所”,所有不认识的“三无”人员,一律送进去。
3、如果在网络设置中设置了缺省网关,那么Windows系统会自动产生一个目的地址为0.0.0.0的缺省路由。
4    问题解决
4.1    更正异常代码逻辑
把CASP本机的IP固定化,写入配置文件,防止代码运行时发生的各种不确定异常
 
4.2    搭建集中化缓存服务,替代原有的JCS
三级部署拓扑图如下:

 

这篇关于XX移动非法票据问题的处理方案分享的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/731730

相关文章

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用