API网关Kong实践笔记

Kong-07 网关层 参数校验

2019-08-06  本文已影响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')

所以, 我们需要把编写好的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 后记

 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形式的控制脚本。

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

上一篇下一篇

猜你喜欢

热点阅读