Kong中Request Transformer注入X-User-Id:{{jwt.claim.sub}}失败求助
解决Kong中OpenID验证后注入用户ID请求头的问题
核心问题原因
Request Transformer(旧版)不支持直接引用{{jwt.claim.sub}}这类模板语法,该语法并非Kong通用的变量引用规则,因此插件会将其作为字符串原样传递给后端。
可行解决方案
方案1:改用Request Transformer Advanced插件
该插件支持从Kong请求上下文中读取变量,语法为${ctx.变量名}。OpenID插件验证成功后,会将用户声明存储在ngx.ctx.authenticated_claims中,配置步骤如下:
- 安装并启用
request-transformer-advanced插件到目标路由/服务 - 在插件配置的添加请求头区域,设置:
X-User-Id: ${ctx.authenticated_claims.sub}
方案2:使用Pre-function插件手动添加请求头
若不想更换插件,可通过Lua代码直接操作请求上下文:
- 安装并启用
pre-function插件,确保其执行顺序在OpenID插件之后 - 在插件的
functions配置中添加以下代码:
local authenticated_claims = ngx.ctx.authenticated_claims if authenticated_claims and authenticated_claims.sub then ngx.req.set_header("X-User-Id", authenticated_claims.sub) end
这段代码会检查上下文内的用户声明,若存在sub字段则自动添加对应请求头。
关键验证步骤
- 确认OpenID插件配置正确:可启用Kong的
debug插件,查看请求详情的ctx部分是否包含authenticated_claims.sub - 核对插件执行顺序:必须保证OpenID插件先于请求头修改类插件(Request Transformer Advanced/Pre-function)执行
内容的提问来源于stack exchange,提问作者Jensus
相关产品推荐
相关产品推荐

