添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

因为最近要开发自定义kong认证插件,比如使用casbin鉴权或者cas sso 单点登录等功能。遇到避免二次登录的问题,故考虑使用Kong 自带的session插件。
那么就遇到了第一个问题,session插件是怎么工作的?

一,获取源码

kong session 源码地址 https://github.com/Kong/kong-plugin-session
在这里插入图片描述
在plugins目录我们看到一个标准的kong插件文件列表

二,handler.lua

在这里插入图片描述
handler.lua定义了优先级为1900,并将hearder_filter,和access两个方法委托给了hearder_filter,access两个文件。

三,一个重要的问题

handler的优先级为1900,高于所有内置认证的插件。那么按照从高到底执行的逻辑,session插件应该优先于所有认证插件的执行。
既然session插件是第一个执行的,并不知道后续认证插件是否认证成功,那么session插件怎么可能又知道认证成功后去设置session呢?

经研究,我发现插件认证顺序并不完全像文档上说的,按照优先级次序执行的。
具体来说,插件阶段分为两个部分,即将请求实际转发前和转发后。
在这里插入图片描述
从上到下,access及之前是转发前的动作,hearder_filter及之后是转发后请求返回后的动作。在不同插件间,转发前的动作是按PRIORITY优先级从大到小的顺序执行,而转发后的动作按优先级从小到大执行。

这样就很好明白,session插件首先是在access中判断是否有cookie,验证权限。然后执行权限插件验证。如果验证成功最后执行session插件中header_filter逻辑,写session。用于下次请求。

四,验证源码

access.lua
在这里插入图片描述
header_filter.lua
在这里插入图片描述
看下源码,果然是这样。

五,那么自定义插件怎么使用session插件呢

在header_filter.lua中,_M.execute(conf)方法前两行:

  local credential = kong.client.get_credential()
  local consumer = kong.client.get_consumer()

加上之后的逻辑我们可以看到,其实session判断的是以上两个变量。
所以我们自定义认证插件中,PRIORITY 小于1900,然后在认证结束后设置kong.client.get_credential(),kong.client.get_consumer()两个变量就好了。

具体设置方法可以使用kong.client.authenticate(consumer, credential)方法。

2、Kong 基础认证件(Basic auth) 3、Kong件: Key Authentication 4、Kong件[IP Restriction]使用【黑白名单】 5、kong网关 Kong件开发工具包 件开发工具包(或称 PDK),是一组 Lua 方法和变量,件可以使用这些方法和变量实现自己的逻辑,PDK 最初在 Kong 0.14.0 中发布,PDK 保证从1.0.0版本开始向前兼容,截至本版本,PDK 尚未达到1.0.0,然而件作者可以放心依赖它与请求、响应或核心组件进行安全可靠的交互 用户可以通过全局变量访问件开发工具包,例如kong.request、kong.log kong.version 当前 Kong 节点的版本号,字符串格式 print(. Kong件开发工具包件开发工具包(或称 PDK),是一组 Lua 方法和变量,件可以使用这些方法和变量实现自己的逻辑,PDK 最初在 Kong 0.14.0 中发布,PDK 保证从1.0.0版本开始向前兼容,截至本版本,PDK 尚未达到1.0.0,然而件作者可以放心依赖它与请求、响应或核心组件进行安全可靠的交互用户可以通过全局变量访问件开发工具包,例如 kong.request、kong... session的简述 session和cookie都是用来解决HTTP的连接时无状态的问题。比如我们常见的登录问题,如果没有session和cookie机制我们每次都要输入用户和密码。 cookie是把状态信息保留在客户端,一旦cookie创建,浏览器就会给每次请求添加上cookie的请求头,当cookie的信息比较大时,这无形给每次请求增加了负担。 session是把用户的状态信息保留在服务端,... 在安装成功kong gateway(OSS) 后,在件列表中就可以找到http-log 件。 http-log 在记录和统计请求响应情况上已完全满足业务需求。但存在无法获取请求和响应体的问题。也就是在做请求响应数据本地化时,无法查看响应的数据和请求的参数。 二、http-log-with-body 基本认证是一种用来允许Web浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式,通常用户名和密码会通过HTTP头传递。 在发送之前是以用户名追加一个冒号然后串接上密码,并将得出的结果字符串再用Base64算法编码。 提供的用户名是:admin 口令是:123456 拼接后的结果是:admin:123456,然后再将其用Base64编码的字符串为:YWRtaW46MTIzNDU2 最终将Base64编码的字符 今天想和大家分享一个关于Session的话题: 当浏览器关闭时,Session就被销毁了?我们知道Session是JSP的九大内置对象(也叫隐含对象)中的一个,它的作用是可以保存当前用户的状态信息,初学它的时候,认为Session的生命周期是从打开一个浏览器窗口发送请求到关闭浏览器窗口,但其实这种说法是不正确的!下面就具体的去解释:当用户第一次访问Web应用中支持Session的某个网页时,就会开始 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 开发工具与关键技术:Java,HTTP协议,session原理 撰写时间:2019-06-17 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~... 为什么会出现session?这是因为HTTP协议的特点--无状态性--导致的。 我们通过浏览器上网时,浏览器和服务器间是通过HTTP协议交互。当我们请求页面时,这一次请求和上一次请求没有任何关系,这就是无状态性。无状态性使得交互更加快速,但也带来一个问题,例如:当我在商品详情页面登陆后,等到了订... 点击上方蓝字进行关注的都是靓仔和仙女呦什么是session?服务器为每个用户创建一个会话,存储用户的相关信息,以便多次请求能够定位到同一个上下文。Web开发中,web-server可以自动为同一个浏览器的访问用户自动创建session,提供数据存储功能。最常见的,会把用户的登录信息、用户信息存储在session中,以保持登录状态。 什么是session一致性问题?只要用户不重启浏览器,每次http cookie和session的区别和联系 cookie是本地客户端用来存储少量数据信息的,保存在客户端,用户能够很容易的获取,安全性不高,存储的数据量小 session是服务器用来存储部分数据信息,保存在服务器,用户不容易获取,安全性高,储存的数据量相对大,存储在服务器,会占用一些服务器资源,但是对于它的优点来说,这个缺点可以忽略了 session有什么用 在一次客户端和服务器为之间的会话中,客户... KongConsumer资源是用来身份验证的消费者。下面介绍一下如何使用KongConsumer资源,先将Kong初始化为空配置。 curl -i http://192.168.1.55:32080 HTTP/1.1 404 Not Found Date: Tue, 24 Dec 2019 14:03:40 GMT Content-Type: application/json; charset=u... 目录登录实现B 端登录之后,浏览器存 cookie登录代码实现细节,cookie设计网关介绍API 网关是什么为什么需要网关从技术角度来看,什么是Kong?为什么使用 KongKong 网...