sqle
sqle copied to clipboard
Scannerd Token失效的问题
版本信息(Version)
sqle latest
问题描述(Describe)
Scannerd的token的时效是365天(包括智能扫描和CI/CD集成) 在用户创建智能扫描/流水线节点超过365天后,Token会失效, 会面临大量Scannerd因为Token过期而无法与SQLE交互的问题,需要及时解决
截图或日志(Log)
如何复现(To Reproduce)
问题原因
- 旧版本的Scannerd的token仅持续一年,当token过期时,将不可使用
解决方案
SQLE V2
- 对于慢日志扫描,将慢日志扫描的接口组移动到v1路由组外,该接口的权限校验全由ScannerVerifier来鉴权
- 在ScannerVerifier中,针对token过期的错误,放行包含该错误的token
- ScannerVerifier增加了对用户的校验
- 修改了原有单元测试,增加了用户信息查询
- 增加了新的单元测试,测试了不可用用户、正常用户、和不存在用户三种情况
- 增加了新的单元测试,测试了过期token和未过期token的两种情况
影响面
v2上的修改仅解决了slowlog上传sql的问题,兼容旧版本过期的token
- 伪造过期的token
- 跳过过期错误
Scanner使用token
流水线
流水线流程中,通过提供的对接命令,最终使用到token的逻辑是SQLE的
快捷审核接口/查询审核结果接口/查询 审核结果SQL三个接口的权限校验
智能扫描任务
智能扫描任务中,通过提供的对接命令,最终使用到token得逻辑是
上传审核SQL接口 的权限校验
token过期解决方案
当前token有指定的365D的过期时间,当token过期时,必须要通过获取/替换新的token方式来确保流程正常运行。
实现方案
增加重置token的接口
- 智能扫描任务 reset token
- 流水线 reset token
构建token的信息调整
- 智能扫描任务的token生成带上了智能扫描任务ID,足够判断权限。token中移除用户ID的绑定信息,避免token被误用到其他渠道
- 流水线任务的token 由于用到了通用的几个接口,暂时保留用户ID
- reset token时可以提供token的有效期
优化
- 智能扫描任务详情/流水线详情可看到token 过期的时间信息 返回过期时间,前端根据过期时间把token字段渲染出不同的颜色
新增操作按钮“重置token”,点击后出现弹窗进行二次确认
按钮位置
- SQL管控配置入口:位于SQL管控配置-数据源智能扫描详情概览列表,在操作列新增操作按钮,名称“重置token”
- 流水线入口:位于流水线详情-流水线节点表格,新增一列“操作”,操作按钮名称“重置token”
发版测试
版本
UI: 4.2505.0-pre3-ee ca02f92a9
DMS: 4.2505.0-pre3-ee 9084154adc
PROVISION: 4.2505.0-pre2 34728e3a2c
SQLE: 4.2505.0-pre3-ee 3e5aa4b466
测试
- 创建慢日志扫描
- 伪造一个很快过期的Token
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcG4iOiJjNGNhNDIzOGEwYjkyMzgyMGRjYzUwOWE2Zjc1ODQ5YiIsImV4cCI6MTc0ODQxNjQ3MywiaWF0IjoxNzQ4NDE2NDczLCJpc3MiOiJhY3Rpb250ZWNoIGRtcyIsInR5cCI6ImRtcy10b2tlbiJ9.nofPvtSPWWW-JouFhgUqm0trCAdtgNAMYdbJG-6Dnos - 设置过期时间间隔为0
- 出现报错 {"message":"parse token failed: Token is expired"}
- 重置Token
- 启动scannerd成功