Skip to content

令牌转换拦截器 🔄

功能介绍 💡

WARNING

令牌转换拦截器就像一个安全中转站,通过临时令牌(code)替代真实令牌(token)来提升系统安全性。主要用于文件下载等需要在URL中传递身份认证信息的场景。

核心功能 ✨

  • 🔑 临时code转换为token
  • 📝 临时code生成接口
  • 🔄 登录时自动生成临时code

应用场景示例 🌟

文件下载安全增强

传统方式的问题

  • ❌ URL中直接携带token
  • ❌ token可能被非法获取
  • ❌ token泄露风险高

转换方式的优势

  • ✅ 使用临时code替代token
  • ✅ code具有时效性
  • ✅ 有效防止token泄露

详细配置说明 ⚙️

核心参数说明

参数名类型必填默认值说明
enabledbooleanfalse是否启用拦截器
rulesarray[object]-转换规则配置列表

转换规则配置详解 (rules)

参数名类型必填默认值说明
business-keystringbearer业务标识(多系统区分用)
field-namestring-临时code的参数名
transform-urlsarray[string]-需要进行转换的URL列表
generate-urlsarray[string]-生成临时code的URL列表
expireDuration10m临时code有效期

配置示例 📋

基础配置

yaml
gateway:
  filter:
    authorization-transform:
      enabled: true  # 启用令牌转换
      rules:
        - field-name: uuid  # 参数名称
          transform-urls:  # 需要转换的地址
            - /api/download/**
          generate-urls:  # 生成临时code的地址
            - /api/code/generate
          expire: 10m  # 10分钟有效期

多规则配置

yaml
gateway:
  filter:
    authorization-transform:
      enabled: true
      rules:
        - field-name: uuid  # 下载文件场景
          transform-urls:
            - /api/download/**
          generate-urls:
            - /api/code/generate
          expire: 30m  # 30分钟有效期
        - field-name: temp_token  # 导出数据场景
          transform-urls:
            - /api/export/**
          generate-urls:
            - /api/temp/token
          expire: 5m  # 5分钟有效期

完整配置示例

yaml
gateway:
  filter:
    authorization-transform:
      enabled: true
      rules:
        # 文件下载场景
        - business-key: file-download
          field-name: download_code
          transform-urls:
            - /api/file/download/**
            - /api/attachment/download/**
          generate-urls:
            - /api/file/code
            - /api/attachment/code
          expire: 15m
        
        # 数据导出场景
        - business-key: data-export
          field-name: export_token
          transform-urls:
            - /api/export/excel/**
            - /api/export/pdf/**
          generate-urls:
            - /api/export/token
          expire: 5m
        
        # 报表查看场景
        - business-key: report-view
          field-name: view_code
          transform-urls:
            - /api/report/view/**
            - /api/chart/view/**
          generate-urls:
            - /api/report/code
          expire: 60m

高级配置示例

yaml
gateway:
  filter:
    authorization-transform:
      enabled: true
      rules:
        # 短期下载 - 高安全性
        - business-key: secure-download
          field-name: secure_code
          transform-urls:
            - /api/secure/download/**
            - /api/confidential/download/**
          generate-urls:
            - /api/secure/code
          expire: 2m  # 2分钟短期有效
        
        # 批量操作 - 中等安全性
        - business-key: batch-operation
          field-name: batch_token
          transform-urls:
            - /api/batch/download/**
            - /api/batch/export/**
          generate-urls:
            - /api/batch/token
          expire: 30m  # 30分钟中期有效
        
        # 公开资源 - 低安全性
        - business-key: public-resource
          field-name: public_code
          transform-urls:
            - /api/public/download/**
          generate-urls:
            - /api/public/code
          expire: 120m  # 2小时长期有效

不同业务场景配置

文档管理系统

yaml
gateway:
  filter:
    authorization-transform:
      enabled: true
      rules:
        # 文档下载
        - business-key: document
          field-name: doc_code
          transform-urls:
            - /api/document/download/**
            - /api/document/preview/**
          generate-urls:
            - /api/document/code
          expire: 20m
        
        # 模板下载
        - business-key: template
          field-name: template_code
          transform-urls:
            - /api/template/download/**
          generate-urls:
            - /api/template/code
          expire: 60m

电商平台

yaml
gateway:
  filter:
    authorization-transform:
      enabled: true
      rules:
        # 订单导出
        - business-key: order-export
          field-name: order_token
          transform-urls:
            - /api/order/export/**
          generate-urls:
            - /api/order/export-token
          expire: 10m
        
        # 商品图片下载
        - business-key: product-image
          field-name: image_code
          transform-urls:
            - /api/product/image/download/**
          generate-urls:
            - /api/product/image/code
          expire: 30m
        
        # 发票下载
        - business-key: invoice
          field-name: invoice_code
          transform-urls:
            - /api/invoice/download/**
          generate-urls:
            - /api/invoice/code
          expire: 15m

教育平台

yaml
gateway:
  filter:
    authorization-transform:
      enabled: true
      rules:
        # 课件下载
        - business-key: courseware
          field-name: courseware_code
          transform-urls:
            - /api/course/download/**
            - /api/material/download/**
          generate-urls:
            - /api/course/code
          expire: 45m
        
        # 作业提交文件下载
        - business-key: homework
          field-name: homework_token
          transform-urls:
            - /api/homework/download/**
          generate-urls:
            - /api/homework/token
          expire: 30m
        
        # 成绩单导出
        - business-key: grade-report
          field-name: grade_code
          transform-urls:
            - /api/grade/export/**
          generate-urls:
            - /api/grade/code
          expire: 10m

企业办公系统

yaml
gateway:
  filter:
    authorization-transform:
      enabled: true
      rules:
        # 合同文件下载
        - business-key: contract
          field-name: contract_code
          transform-urls:
            - /api/contract/download/**
          generate-urls:
            - /api/contract/code
          expire: 60m
        
        # 财务报表导出
        - business-key: financial-report
          field-name: finance_token
          transform-urls:
            - /api/finance/export/**
          generate-urls:
            - /api/finance/token
          expire: 5m  # 财务数据短期有效
        
        # 员工信息导出
        - business-key: employee-data
          field-name: employee_code
          transform-urls:
            - /api/employee/export/**
          generate-urls:
            - /api/employee/code
          expire: 15m

使用流程指南 📝

  1. 生成临时Code
http
GET /api/code/generate HTTP/1.1
Host: your-domain.com
Authorization: Bearer your-real-token

接口返回示例

json
{
    "code": 0,
    "successful": true,
    "msg": null,
    "data": {
        "code": "bearer:d8bb2c4aeff84438b5b5627e500e6b2c",  // 临时code
        "expire": "2025-04-28 21:16:22"  // 过期时间
    },
    "encrypt": false
}
  1. 使用临时Code
http
GET /api/download/file?uuid=temporary-code HTTP/1.1
Host: your-domain.com

最佳实践 💡

  1. 安全建议

    • 设置合适的过期时间
    • 使用HTTPS传输
    • 避免重复使用临时code
  2. 性能优化

    • 合理缓存临时code
    • 及时清理过期code
    • 控制生成频率
  3. 用户体验

    • 提前生成临时code
    • 处理code过期情况
    • 添加友好的错误提示

常见问题 ❓

  1. 临时code失效

    • 检查是否超过有效期
    • 确认code是否已使用
    • 验证code格式是否正确
  2. 转换失败

    • 检查URL配置是否正确
    • 验证参数名称是否匹配
    • 确认Redis服务是否正常

安全提示 ⚠️

CAUTION

  1. 临时code仅一次有效
  2. 及时清理过期code
  3. 监控异常访问行为
  4. 避免code重复使用

相关文档 📚