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

相关文章

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

Python视频处理库VidGear使用小结

《Python视频处理库VidGear使用小结》VidGear是一个高性能的Python视频处理库,本文主要介绍了Python视频处理库VidGear使用小结,文中通过示例代码介绍的非常详细,对大家的... 目录一、VidGear的安装二、VidGear的主要功能三、VidGear的使用示例四、VidGea

Python结合requests和Cheerio处理网页内容的操作步骤

《Python结合requests和Cheerio处理网页内容的操作步骤》Python因其简洁明了的语法和强大的库支持,成为了编写爬虫程序的首选语言之一,requests库是Python中用于发送HT... 目录一、前言二、环境搭建三、requests库的基本使用四、Cheerio库的基本使用五、结合req