kong with keycloak 基于范围的授权
kong with keycloak Authorization based on scope
我期待基于范围限制用户访问。我正在使用 Kong API gateway
这是我用于添加 nokia-oidc
插件的 docker 文件。 https://github.com/nokia/kong-oidc
docker 文件:
FROM kong:latest
USER root
RUN apk update && apk add git unzip luarocks
RUN luarocks install kong-oidc
USER kong
在令牌中,我得到的范围类似于“openid profile email”
"session_state": "8d408ace-4692-458c-a7d0-69b19c1ded11",
"acr": "0",
"allowed-origins": [
"*"
],
"scope": "openid profile email",
我正在查看是否存在基于范围的限制,因为 openid
是默认限制。
它没有按预期工作。如果令牌中不存在 myscope,我仍然可以登录。
请帮忙提前谢谢...!
使用 OIDC 插件您将无法执行身份验证,但您可以执行授权
你必须使用插件:https://github.com/gbbirkisson/kong-plugin-jwt-keycloak
这将从内部解析 JWT 令牌 header x-access-token
并基于您可以通过范围、领域角色和客户端角色对用户进行身份验证。
使用这个docker在Kong里面添加插件
FROM kong:2.0.3-alpine
LABEL description="Alpine + Kong 2.0.3 + kong-oidc plugin"
ENV OIDC_PLUGIN_VERSION=1.1.0-0
ENV JWT_PLUGIN_VERSION=1.1.0-1
USER root
RUN apk update && apk add git unzip luarocks
RUN luarocks install kong-oidc
RUN git clone https://github.com/PSheshenya/kong-oidc.git \
&& cd kong-oidc \
&& luarocks make
RUN luarocks pack kong-oidc ${OIDC_PLUGIN_VERSION} \
&& luarocks install kong-oidc-${OIDC_PLUGIN_VERSION}.all.rock
RUN git clone --branch 20200505-access-token-processing https://github.com/BGaunitz/kong-plugin-jwt-keycloak.git \
&& cd kong-plugin-jwt-keycloak \
&& luarocks make
RUN luarocks pack kong-plugin-jwt-keycloak ${JWT_PLUGIN_VERSION} \
&& luarocks install kong-plugin-jwt-keycloak-${JWT_PLUGIN_VERSION}.all.rock
USER kong
您可能还必须将 JWT-Keyclaok
插件优先级更改为 900
或更低,以便在 OIDC
插件之后开始执行。
Harsh 的回答不完整,安装 JWT 插件 https://github.com/gbbirkisson/kong-plugin-jwt-keycloak
接下来,确保您的 oidc 插件是最新的,如果您在 /usr/local/share/lua/5.1/kong/plugins/oidc/utils.lua
中看到它,您应该没问题
function M.injectAccessToken(accessToken)
ngx.req.set_header("X-Access-Token", accessToken)
end
好的,现在默认情况下 JWT 插件不会检查您的 X-Access-Token
Header 并且它不会为您提供在 json 配置中编辑它的选项,您将不得不编辑 lua 代码。
Inside /usr/local/share/lua/5.1/kong/plugins/jwt-keycloak/handler.lua
在 cookie_names 检查之后但在 autthorization_header 检查
之前添加以下行
local access_header = kong.request.get_header("X-Access-Token")
if access_header ~="" then
kong.log("X-Access-Token ", access_header)
return access_header
end
你现在应该可以走了
我期待基于范围限制用户访问。我正在使用 Kong API gateway
这是我用于添加 nokia-oidc
插件的 docker 文件。 https://github.com/nokia/kong-oidc
docker 文件:
FROM kong:latest
USER root
RUN apk update && apk add git unzip luarocks
RUN luarocks install kong-oidc
USER kong
在令牌中,我得到的范围类似于“openid profile email”
"session_state": "8d408ace-4692-458c-a7d0-69b19c1ded11",
"acr": "0",
"allowed-origins": [
"*"
],
"scope": "openid profile email",
我正在查看是否存在基于范围的限制,因为 openid
是默认限制。
它没有按预期工作。如果令牌中不存在 myscope,我仍然可以登录。
请帮忙提前谢谢...!
使用 OIDC 插件您将无法执行身份验证,但您可以执行授权
你必须使用插件:https://github.com/gbbirkisson/kong-plugin-jwt-keycloak
这将从内部解析 JWT 令牌 header x-access-token
并基于您可以通过范围、领域角色和客户端角色对用户进行身份验证。
使用这个docker在Kong里面添加插件
FROM kong:2.0.3-alpine
LABEL description="Alpine + Kong 2.0.3 + kong-oidc plugin"
ENV OIDC_PLUGIN_VERSION=1.1.0-0
ENV JWT_PLUGIN_VERSION=1.1.0-1
USER root
RUN apk update && apk add git unzip luarocks
RUN luarocks install kong-oidc
RUN git clone https://github.com/PSheshenya/kong-oidc.git \
&& cd kong-oidc \
&& luarocks make
RUN luarocks pack kong-oidc ${OIDC_PLUGIN_VERSION} \
&& luarocks install kong-oidc-${OIDC_PLUGIN_VERSION}.all.rock
RUN git clone --branch 20200505-access-token-processing https://github.com/BGaunitz/kong-plugin-jwt-keycloak.git \
&& cd kong-plugin-jwt-keycloak \
&& luarocks make
RUN luarocks pack kong-plugin-jwt-keycloak ${JWT_PLUGIN_VERSION} \
&& luarocks install kong-plugin-jwt-keycloak-${JWT_PLUGIN_VERSION}.all.rock
USER kong
您可能还必须将 JWT-Keyclaok
插件优先级更改为 900
或更低,以便在 OIDC
插件之后开始执行。
Harsh 的回答不完整,安装 JWT 插件 https://github.com/gbbirkisson/kong-plugin-jwt-keycloak
接下来,确保您的 oidc 插件是最新的,如果您在 /usr/local/share/lua/5.1/kong/plugins/oidc/utils.lua
中看到它,您应该没问题
function M.injectAccessToken(accessToken)
ngx.req.set_header("X-Access-Token", accessToken)
end
好的,现在默认情况下 JWT 插件不会检查您的 X-Access-Token
Header 并且它不会为您提供在 json 配置中编辑它的选项,您将不得不编辑 lua 代码。
Inside /usr/local/share/lua/5.1/kong/plugins/jwt-keycloak/handler.lua
在 cookie_names 检查之后但在 autthorization_header 检查
local access_header = kong.request.get_header("X-Access-Token")
if access_header ~="" then
kong.log("X-Access-Token ", access_header)
return access_header
end
你现在应该可以走了