美文网首页API网关Kong实践笔记
Kong-07 网关层 参数校验

Kong-07 网关层 参数校验

作者: 国服最坑开发 | 来源:发表于2019-08-06 20:11 被阅读3次

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

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

0x01 准备工作

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

准备工作
并且要求,能正常访问:
准备工作

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里,:

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

选择PreFunction
在添加弹出的对话框中, functions中输入上面准备好的Lua字符串. 留意需要按回车,才能正确输入.
配置Pre Function

0x04 验证

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

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

失败例

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


成功例

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

0x05 后记

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

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

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

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

相关文章

网友评论

    本文标题:Kong-07 网关层 参数校验

    本文链接:https://www.haomeiwen.com/subject/bdtgdctx.html