最近开始学习 Kong——一个基于 OpenResty(Nginx 和 LuaJIT 的高度结合品) 实现的 API Gateway,里面的一些设计理念无法理解,请知道的大神指点一下,先谢过了!
问题如下:
- Kong 的插件里有 JWT 认证插件,需要创建
Consumer
,为什么不直接验证现有的数据库中的用户
? - 如果这个认证不是针对最终用户的,那么他的意义是什么?限制非自有服务或 APP 对 API 的访问吗?
如果这个认证插件是面向终端的,那么问题又来了,比如前端调用 API 这个 Key 肯定会暴露,那么别人就可以用这个 Key 来访问 后端 API 了!
我按照我自己的思路绘制了一个大致的流程图:
不知道 Kong 是不是这样用的,最终的认证还是需要单独拎出来做个服务
小白一个,这里简单谈谈我的见解。
https://getkong.org/plugins/j...
上面的是官方的jwt插件的说明文档,我根据这个文档来说说想法。
首先,consumer并不是用户,不是说一个用户就要对应一个consumer,具体是什么,我其实也是不太清楚,总之在使用插件时需要用到就是了。
在使用插件前先创建一个consumer,这个就不用多说了。接下来应该为这个consumer创建一个凭据,这个的参数里面你就可以指定secret,当然也可以插件自己生成。在创建凭据之后会返回信息,里面就包含几个重要的内容,key和secret,在之后将会用到。
在拿到之后,你就可以创建自己的jwt了,当然,payload必须包含key,具体是这样的,'iss':{key},其他的信息你自己加,这里的key就是上面返回的key,而加密所需要的secret就是上面返回的secret,至此,你的jwt创建成功,而这个jwt同样可以在kong中进行验证。
所以构建jwt的全过程都是你自己控制的,包括secret等等,而其实那些个key和consumer什么的,我也不是很懂,我也是初学者而已。
以上内容均理解官方文档得来,并无实际验证,只是给了一个思路而已,所以正确性未知,建议多看一下文档,并且自己实现一下,去看看是否真的是这样用的。