当前位置: 首页 > 网络应用技术

Kong开发自定义验证认证插件-in

时间:2023-03-08 12:55:15 网络应用技术

  本文主要介绍了Kong Gateway插头,所使用的库以及插件文件的构造结构的编写。测试案例使用简单的自定义权限身份验证插件-IN.Reference官方网站地址是

  UI管理接口可以调用可以调用的列表与插件实体的省进行交互。没有数据交互相关文档定义了一些数据库交互信息,并在使用数据库时使用插件-in.it时使用它。是插头-in的核心逻辑,它是在某些kong的请求和连接中实现各种操作的接口。而不是定义某些数据库脚本操作,例如创建表等,并将其与daos.lua一起使用。这是配置插件所需的字段配置信息,以及某些字段检查操作。用户定义的逻辑主要是这两个文件的逻辑。在开发过程中,您可以使用官方模板https://github.com/kong/kong-插件来开发。

  handler.lua文件的结构如下:

  每种方法将在不同阶段执行。我们可以根据需求实现相应的方法。将以下方法引入这些方法;|方法名称|链接|描述||------------------------------------ |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |||init_worker |仅在每个NGINX工作流的开头执行。|||ssl_certified |SSL握手的SSL证书服务阶段.. |||重写|作为重写阶段处理程序,它在从客户端接收每个请求时执行它。在此阶段,既没有“服务”或“消费者”。因此,只有当插件到全局插件的插件才能执行。它是在代理|之前执行的。|访问|已被“ header_filter()”和“ body_filter()”取代。在接收到上游服务的整个响应后,请在发送给客户端之前执行。|||header_filter |执行executeEach块。由于响应流传输将返回给客户端,因此它可能会超过缓冲区的大小并通过块传输。如果响应很大,则可以多次调用此功能。有关详细信息,您可以检查Lua-nginx模块。|||日志|将最后一个响应字节发送给客户端执行。

  

  

  本地函数check_customerkey(customerkey)本地确定本地错误返回,结束

  

  如果pared_url,则返回parsed_url end

  路径然后parsed_url.path =“/”

  parsed_urls_cache [host_url] = parsed_url

  

  本地pared_url = parse_url(http_endpoint)本地主机= parsed_url.host local port = tonumber(parsed_url.port)

  本地httpc = httputil.new()httpc:set_timeout(timeout)

  [“ content-level”] = #payload如果parsed_url.userinfo heads_cache [“授权”] =“ basic”。

  params_cache.method =方法params_cache.body =有效载荷params_cache.cepalive_timeout = keepalive

  本地url = fmt(“%s://%s:%d%s”,parsed_url.scheme,parsed_url.host,pared_url.port,pared_url.path)

  - 注意:进行深层副本,因此可以重复使用该表本地res,err = httpc:request_uri(url,params_cache),如果不重新修复niln nil,“失败” ..(端口)..“:” .. Err End

  - 始终读取响应主体,即使我们将其丢弃并在成功上丢弃它,local wenders_body = res.body local success = res.status <400 local err_msg

  如果不是成功,则err_msg =“请求对”

  返回成功,err_msg结束

  函数selfpermissionhandler:init_wriser()

  - 您的自定义代码在这里kong.log.debug(“ ==============================================================================================================================================================================================================================================嗨

  结尾 - ]]

  函数selfpermissionHandler:访问(plugin_conf)-1。键local customerkey = kong.request_header(“ x-cusom- key”)如果用户的请求headerCustomer键为null,请检查请求')return kong.response.error(402,“请配置客户键请求”)end Kong.log(“ ==================

  --2。检查键是否与规则本地确定相符,err = check_customerkey(customerkey)如果err,则kong.log.err(“ =========================”,请检查:

  -3。请求权限中心,获得键路径= kong.request.get_path()权限服务器错误:“,err_msg)返回kong.response.error(440,“对不起,您没有此资源许可”)结束

  kong.log.inspect(plugin_conf)

  结尾

  - rturn我们的插件对象返回selfpermissionHandler

  插件参考:http-log,速率限制,两个本机插件的源代码,书面,所使用的库如下:

  原始:https://juejin.cn/post/7101561475621191716