在Kong v5.1中设置Keycloak

113次阅读
没有评论

问题描述

在尝试使用Kong v5.1与Keycloak配合使用时遇到了问题。他找到了一个教程,介绍了如何使用两个开源插件将Keycloak与Kong配合使用,但是教程已经过时了两年,他在配置过程中遇到了一些问题。大部分步骤仍然有效,他也成功通过luarocks安装了教程中的插件版本。但是在配置Kong与插件配合工作后,Kong无法重新启动,报错信息如下:

plungins = bundeld,oidc,jwt-keycloak
Error: /usr/local/share/lua/5.1/kong/tools/utils.lua:708: error loading module 'kong.plugins.oidc.handler':/usr/local/share/lua/5.1/kong/plugins/oidc/handler.lua:1: module 'kong.plugins.base_plugin' not found:No LuaRocks module found for kong.plugins.base_plugin    no field package.preload['kong.plugins.base_plugin']

用户尝试了以下解决方法:
– 尝试安装base_plugin,但是Lua找不到任何相关模块。
– 在Google上搜索了很多,但是没有找到相同的问题。

用户目前陷入困境,想知道是否有其他方法(也许直接使用oAuth插件?),或者如何解决这个问题。用户也不太清楚如何调试这个问题,希望能得到一些建议。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

问题的根本原因是BasePlugin在Kong 3.x中已被弃用并移除,可以在这里查看相关信息:https://docs.konghq.com/gateway/latest/plugin-development/custom-logic/#migrating-from-baseplugin-module。jwt-keycloak插件在handler.lua中导入了BasePlugin,因此您需要自行进行迁移,这很简单,只需fork其存储库,更改代码,并在Dockerfile中从源代码安装即可。
以下是解决方案的步骤:
1. Fork jwt-keycloak插件的存储库。
2. 在您的fork中,打开handler.lua文件。
3. 将所有kong.plugins.base_plugin的引用替换为kong.plugins.plugin,其中plugin是您正在使用的插件的名称。
4. 提交并推送更改。
5. 在Dockerfile中使用源代码安装您的fork版本的jwt-keycloak插件。
以下是一个示例Dockerfile的片段:

# 安装git和luarocks
RUN apk add --no-cache git luarocks
# 克隆您fork的jwt-keycloak插件存储库
RUN git clone https://github.com/your_username/kong-plugin-jwt-keycloak.git /tmp/kong-plugin-jwt-keycloak
# 安装插件
RUN cd /tmp/kong-plugin-jwt-keycloak && luarocks make

请注意,上述示例假设您已经安装了git和luarocks,并且将您的fork存储库克隆到了/tmp/kong-plugin-jwt-keycloak目录中。您需要根据实际情况进行调整。

方案2

如果您不熟悉插件的开发和修改,可以尝试使用其他oAuth插件,如Kong官方提供的oauth2插件。这些插件可能不需要对Kong进行修改,并且可能更容易集成和使用。您可以在Kong的官方文档中找到有关这些插件的更多信息。

方案3

如果您对插件的开发和修改比较熟悉,您还可以尝试自己修改jwt-keycloak插件,以使其与Kong v5.1兼容。您可以查看jwt-keycloak插件的源代码,并根据Kong的最新版本进行相应的修改。这可能需要一些时间和技术知识,但是如果您成功了,您就可以使用最新版本的Kong和jwt-keycloak插件了。
以上是几种解决方案供您参考。根据您的实际情况和技术能力,选择适合您的方法来解决这个问题。希望对您有帮助!

正文完