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

相关文章

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

pip install jupyterlab失败的原因问题及探索

《pipinstalljupyterlab失败的原因问题及探索》在学习Yolo模型时,尝试安装JupyterLab但遇到错误,错误提示缺少Rust和Cargo编译环境,因为pywinpty包需要它... 目录背景问题解决方案总结背景最近在学习Yolo模型,然后其中要下载jupyter(有点LSVmu像一个

解决jupyterLab打开后出现Config option `template_path`not recognized by `ExporterCollapsibleHeadings`问题

《解决jupyterLab打开后出现Configoption`template_path`notrecognizedby`ExporterCollapsibleHeadings`问题》在Ju... 目录jupyterLab打开后出现“templandroidate_path”相关问题这是 tensorflo

如何解决Pycharm编辑内容时有光标的问题

《如何解决Pycharm编辑内容时有光标的问题》文章介绍了如何在PyCharm中配置VimEmulator插件,包括检查插件是否已安装、下载插件以及安装IdeaVim插件的步骤... 目录Pycharm编辑内容时有光标1.如果Vim Emulator前面有对勾2.www.chinasem.cn如果tools工

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

Java多线程父线程向子线程传值问题及解决

《Java多线程父线程向子线程传值问题及解决》文章总结了5种解决父子之间数据传递困扰的解决方案,包括ThreadLocal+TaskDecorator、UserUtils、CustomTaskDeco... 目录1 背景2 ThreadLocal+TaskDecorator3 RequestContextH

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

关于最长递增子序列问题概述

《关于最长递增子序列问题概述》本文详细介绍了最长递增子序列问题的定义及两种优化解法:贪心+二分查找和动态规划+状态压缩,贪心+二分查找时间复杂度为O(nlogn),通过维护一个有序的“尾巴”数组来高效... 一、最长递增子序列问题概述1. 问题定义给定一个整数序列,例如 nums = [10, 9, 2