Kong[nginx]-07 网关层 参数校验


KONG专题目录


本次实验使用的官方文档参考这里。

终于,今天我们可以体验一下网关服务器的一个比较实用的功能:网关层用户参数校验
在请求进入后端服务之前,可以在网关层,先过滤掉非法的请求。
这样一来,后端服务就可以集中处理业务功能。

0x01 准备工作

参考本作的前置文章, 我们需要一个http://aaa.com/v1/user/get的API。并且,已经在Konga上配置好Service和Router。

Kong[nginx]-07 网关层 参数校验_第1张图片
准备工作

并且要求,能正常访问:
Kong[nginx]-07 网关层 参数校验_第2张图片
准备工作

0x02 Lua脚本编写

这里给出一个简单的校验规则:对请求参数的 HEADER里要求包含一个 x-custom-auth 参数。

   -- Get list of request headers
   local custom_auth = kong.request.get_header("x-custom-auth")

   -- Terminate request early if our custom authentication header
   -- does not exist
   if not custom_auth then
     return kong.response.exit(401, "Invalid Credentials")
   end

   -- Remove custom authentication header from request
   kong.service.request.clear_header('x-custom-auth')
  • 由于Konga配置画面使用的PreFunction接收的参数是String格式的Lua脚本,

所以, 我们需要把编写好的Lua校验文件, 转换成去掉了换行符的String格式。

把上面的代码复制到lua-minifier里,:

Kong[nginx]-07 网关层 参数校验_第3张图片
minilua.png

拿到转换后的Lua压缩串:

local a=kong.request.get_header("x-custom-auth")if not a then return kong.response.exit(401,"Invalid Credentials")end;kong.service.request.clear_header('x-custom-auth')

0x03插件配置

打开Konga中需要添加参数校验的Router, 我们为它添加一个Plugin

Kong[nginx]-07 网关层 参数校验_第4张图片
选择PreFunction

在添加弹出的对话框中, functions中输入上面准备好的Lua字符串. 留意需要按回车,才能正确输入.
Kong[nginx]-07 网关层 参数校验_第5张图片
配置Pre Function

0x04 验证

此时,aaa.com上的接口,都需要在Header中添加 一个x-custom-auth字段才能访问,

所以,此时如果直接访问,应该会返回一个 401 错误.

Kong[nginx]-07 网关层 参数校验_第6张图片
失败例

当我们添加了一这个请求参数,再次尝试接口请求:


Kong[nginx]-07 网关层 参数校验_第7张图片
成功例

此时, 我们的Request就可以通过PreFunction的检验,进入后端服务并正常返回了.

0x05 后记

  • 看文档, kong的PreFunction可以支持@auth.lua方式的引用.但是我在Konga没有试验成功. 以文件的方式添加网关校验功能, 对于稍微复杂的场景, 显的尤为重要. 后续有机会再次测试.
 curl -i -X POST http://localhost:8001/services/plugin-testing/plugins \
     -F "name=pre-function" \
     -F "[email protected]"

这里的@custom-auth.lua指的是 curl 命令提交文件参数。所以, 这个PreFunction暂时只能支持String形式的控制脚本。

  • 这里只是给出了最基本的校验方法, 实际开发过程中, 我们可以为一系列路由,添加更为实用的校验方法;也会用到一些其他后端服务:redis,mysql等. 好在Lua在这方面的支持程度已经十分强大.

今天的实战体验极好, 可操作性极高. 嬉しい~~


KONG专题目录


你可能感兴趣的:(Kong[nginx]-07 网关层 参数校验)