Kong扩展jwt插件增加黑名单验证

编程

扩展功能

  • 优化配置参数,删除从cookie获取token,支持从url和header获取token,增加redis配置,增加默认值。

  • 验证payload是否含有jti,没有返回401。

  • 验证jti是否在黑名单,若在返回401和对应的value。

使用

  1. 增加一个service,url为http://mockbin.org/request

  1. 增加一个router,path为/mock

  1. 增加jwt插件,配置如下

  1. 调用我们的授权服务获取一个access_token

  1. 在redis数据库中增加key为prefix+jti

  1. 携带token访问service,验证结果

核心代码

{ redis_host = {

type = "string",

required = true,

default = "127.0.0.1"

} },

{ redis_port = {

type = "number",

required = true,

default = 6379

} },

{ redis_db = {

type = "number",

required = true,

default = 0

} },

{ redis_password = {

type = "string",

} },

{ string_key_prefix = {

type = "string",

required = true,

default = "userOffline:"

} },

function checkJti(conf, jti)

if not jti then

return false, { status = 401, message = "Invalid jti in claims" }

end

local red = redis:new()

red:set_timeout(1000)

local ok, err = red:connect(conf.redis_host, conf.redis_port)

if not ok then

kong.log.err("failed to connect : ", err)

return

end

if conf.redis_password and conf.redis_password ~= "" then

local count

count, err = red:get_reused_times()

if 0 == count then

ok, err = red:auth(conf.redis_password)

if not ok then

kong.log.err("failed to auth: ", err)

return

end

elseif err then

kong.log.err("failed to get reused times: ", err)

return

end

end

ok, err = red:select(conf.redis_db)

if not ok then

kong.log.err("failed to select db: ", err)

return

end

-- get key

local res, err = red:get(conf.string_key_prefix .. jti)

kong.log.notice("red:get:", conf.string_key_prefix .. jti, ",value=", res)

if err then

kong.log.err("failed to get key", conf.string_key_prefix .. jti)

end

--连接池大小是100个,并且设置最大的空闲时间是 10 秒

ok, err = red:set_keepalive(10000, 100)

if not ok then

kong.log.err("failed to set keepalive: ", err)

return

end

if res ~= ngx.null then

return false, { status = 401, message = res }

end

return true

end

以上是 Kong扩展jwt插件增加黑名单验证 的全部内容, 来源链接: utcz.com/z/516465.html

回到顶部