You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kong Gateway配置JWT后UI资源文件授权问题及自动传参需求

Kong Gateway JWT认证:自动为资源文件携带令牌的解决方案

针对UI资源文件无法自动携带JWT令牌的问题,可通过以下几种Kong配置方案解决:

方案一:Cookie + Request-Transformer 插件组合

这是最直接的实现方式,利用浏览器自动携带Cookie的特性,结合Kong插件将Cookie中的token转为请求头:

  • 第一步:当用户首次通过JWT访问UI页面时,用response-transformer插件将JWT写入Cookie,配置示例(通过Kong Admin API):
    curl -X POST http://kong-admin:8001/services/<your-ui-service>/plugins \
      -d name=response-transformer \
      -d config.headers.add.Set-Cookie="jwt_token=<your-jwt-value>; Path=/; SameSite=Lax; HttpOnly"
    
    这里要确保Path=/,让所有子路径的资源请求都能携带该Cookie。
  • 第二步:配置request-transformer插件,从Cookie提取token并添加到Authorization头:
    curl -X POST http://kong-admin:8001/services/<your-ui-service>/plugins \
      -d name=request-transformer \
      -d config.headers.add.Authorization="Bearer $(kong.request.get_cookie('jwt_token'))"
    
  • 第三步:调整JWT认证插件的配置,使其支持从Cookie读取token(如果原本只支持请求头),确保资源请求的token能被Kong验证。

方案二:Pre-Function 自定义Lua脚本

如果需要更灵活的逻辑,可通过pre-function插件编写Lua脚本,在请求到达后端前自动注入token:

  • 配置pre-function插件,添加以下Lua代码(作用于access阶段):
    -- 仅针对UI资源路径生效,可根据实际路径调整
    if string.find(kong.request.get_path(), "^/static/") or string.find(kong.request.get_path(), "^/assets/") then
      local jwt_token = kong.request.get_header("Authorization")
      -- 如果请求头已有token,直接复用;否则从Cookie读取
      if not jwt_token then
        jwt_token = "Bearer " .. kong.request.get_cookie("jwt_token")
      end
      if jwt_token then
        kong.service.request.set_header("Authorization", jwt_token)
      end
    end
    
    这个逻辑会优先复用请求头的token,若没有则从Cookie提取,确保资源请求自动携带有效令牌。

关键注意事项

  • 确保Cookie的HttpOnly和SameSite属性设置合理,平衡安全性和兼容性。
  • 限制插件或脚本的作用范围到UI相关路径,避免影响其他服务的认证逻辑。
  • 测试时要验证静态资源(如JS、CSS、图片)的请求头是否正确携带Authorization令牌。

内容的提问来源于stack exchange,提问作者Arzoo Shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 12:05:12