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阶段):
这个逻辑会优先复用请求头的token,若没有则从Cookie提取,确保资源请求自动携带有效令牌。-- 仅针对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
关键注意事项
- 确保Cookie的
HttpOnly和SameSite属性设置合理,平衡安全性和兼容性。 - 限制插件或脚本的作用范围到UI相关路径,避免影响其他服务的认证逻辑。
- 测试时要验证静态资源(如JS、CSS、图片)的请求头是否正确携带
Authorization令牌。
内容的提问来源于stack exchange,提问作者Arzoo Shah
相关产品推荐
相关产品推荐

