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

Kong API Gateway OSS中JWT令牌自动续期问题咨询

解决Kong OSS中JWT令牌过期续期及签名问题

先明确:Kong OSS自带的jwt插件仅负责验证JWT令牌的有效性,本身不提供JWT签名生成或自动续期的功能。下面是几个实用的解决思路:

一、实现令牌自动续期逻辑

1. 客户端侧处理

当客户端收到Kong返回的401 Unauthorized响应时,主动调用你的认证服务(自行搭建),传入旧令牌或refresh token,获取新的JWT令牌后重新发起原请求。这种方式无需修改Kong配置,逻辑简单易维护。

2. 网关侧通过自定义脚本处理

利用Kong OSS支持的pre-function或post-function插件,编写Lua脚本拦截请求/响应,实现自动续期:

  • 比如在post-function中检测到401响应时,调用认证服务获取新令牌,替换请求头后重新执行请求。示例脚本如下:
-- 拦截401响应,尝试续期令牌
local status = kong.response.get_status()
if status == 401 then
    local auth_header = kong.request.get_header("Authorization")
    if auth_header and string.find(auth_header, "Bearer ") then
        -- 调用你的认证续期接口
        local refresh_res, err = kong.service.request.send({
            method = "POST",
            path = "/your-auth-service/refresh",
            headers = { ["Authorization"] = auth_header }
        })
        
        if refresh_res and refresh_res.status == 200 then
            local new_token = refresh_res.body:match('"access_token":"(.-)"') -- 适配你的认证服务返回格式
            if new_token then
                -- 替换请求头并重试原请求
                kong.service.request.set_header("Authorization", "Bearer " .. new_token)
                return kong.service.request.execute()
            end
        end
    end
end

注意:脚本需根据你的认证服务返回格式调整令牌解析逻辑,同时要处理网络异常等边界情况。

二、JWT签名生成方案

Kong OSS没有内置的JWT签名插件,你需要自行搭建独立的认证服务来生成和签名JWT令牌:

  • 用任意后端语言实现即可(比如Node.js、Go、Java),借助对应语言的JWT库(如Node.js的jsonwebtoken)生成带签名的令牌。
  • 生成令牌时,要确保签名算法、密钥与Kong jwt插件配置完全一致(比如HS256算法对应相同的secret),这样Kong才能正常验证令牌有效性。

三、替代方案:使用OAuth2插件实现续期

如果场景允许,可切换到Kong OSS的oauth2插件,它原生支持refresh token机制,天然解决令牌续期问题:

  • 客户端首次认证后,会拿到短期有效的access_token和长期有效的refresh_token。
  • 当access_token过期时,客户端用refresh_token向Kong请求新的access_token,无需重新登录。
  • 这种方案比自定义JWT续期更规范,适合大多数需要持续认证的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:25:31