sqle icon indicating copy to clipboard operation
sqle copied to clipboard

Scannerd Token失效的问题

Open winfredLIN opened this issue 1 year ago • 1 comments

版本信息(Version)

sqle latest

问题描述(Describe)

Scannerd的token的时效是365天(包括智能扫描和CI/CD集成) 在用户创建智能扫描/流水线节点超过365天后,Token会失效, 会面临大量Scannerd因为Token过期而无法与SQLE交互的问题,需要及时解决

截图或日志(Log)

如何复现(To Reproduce)

问题原因

  1. 旧版本的Scannerd的token仅持续一年,当token过期时,将不可使用

解决方案

SQLE V2

  1. 对于慢日志扫描,将慢日志扫描的接口组移动到v1路由组外,该接口的权限校验全由ScannerVerifier来鉴权
  2. 在ScannerVerifier中,针对token过期的错误,放行包含该错误的token
  3. ScannerVerifier增加了对用户的校验
  4. 修改了原有单元测试,增加了用户信息查询
  5. 增加了新的单元测试,测试了不可用用户、正常用户、和不存在用户三种情况
  6. 增加了新的单元测试,测试了过期token和未过期token的两种情况

影响面

v2上的修改仅解决了slowlog上传sql的问题,兼容旧版本过期的token

winfredLIN avatar Sep 13 '24 07:09 winfredLIN

  1. 伪造过期的token image image
  2. 跳过过期错误 image image

winfredLIN avatar Sep 19 '24 10:09 winfredLIN

Scanner使用token

流水线

Image 流水线流程中,通过提供的对接命令,最终使用到token的逻辑是SQLE的快捷审核接口/查询审核结果接口/查询 审核结果SQL三个接口的权限校验

智能扫描任务

Image 智能扫描任务中,通过提供的对接命令,最终使用到token得逻辑是 上传审核SQL接口 的权限校验

token过期解决方案

当前token有指定的365D的过期时间,当token过期时,必须要通过获取/替换新的token方式来确保流程正常运行。

实现方案

增加重置token的接口

  1. 智能扫描任务 reset token
  2. 流水线 reset token

构建token的信息调整

  • 智能扫描任务的token生成带上了智能扫描任务ID,足够判断权限。token中移除用户ID的绑定信息,避免token被误用到其他渠道
  • 流水线任务的token 由于用到了通用的几个接口,暂时保留用户ID
  • reset token时可以提供token的有效期

优化

  • 智能扫描任务详情/流水线详情可看到token 过期的时间信息 返回过期时间,前端根据过期时间把token字段渲染出不同的颜色

LordofAvernus avatar May 12 '25 09:05 LordofAvernus

新增操作按钮“重置token”,点击后出现弹窗进行二次确认

Image

按钮位置

  • SQL管控配置入口:位于SQL管控配置-数据源智能扫描详情概览列表,在操作列新增操作按钮,名称“重置token”
  • 流水线入口:位于流水线详情-流水线节点表格,新增一列“操作”,操作按钮名称“重置token”

Gygkimo95 avatar May 13 '25 07:05 Gygkimo95

发版测试

版本

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

测试

  • 创建慢日志扫描 Image
  • 伪造一个很快过期的Token eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcG4iOiJjNGNhNDIzOGEwYjkyMzgyMGRjYzUwOWE2Zjc1ODQ5YiIsImV4cCI6MTc0ODQxNjQ3MywiaWF0IjoxNzQ4NDE2NDczLCJpc3MiOiJhY3Rpb250ZWNoIGRtcyIsInR5cCI6ImRtcy10b2tlbiJ9.nofPvtSPWWW-JouFhgUqm0trCAdtgNAMYdbJG-6Dnos Image
  • 设置过期时间间隔为0 Image
  • 出现报错 {"message":"parse token failed: Token is expired"} Image
  • 重置Token Image
  • 启动scannerd成功 Image

littleniannian avatar May 28 '25 07:05 littleniannian