Keycloak 基于范围的keybeapt授权

Keycloak 基于范围的keybeapt授权,keycloak,api-gateway,kong,kong-plugin,Keycloak,Api Gateway,Kong,Kong Plugin,我期待根据范围限制用户访问。我正在使用kongapi网关这是我的docker文件,用于添加诺基亚oidc插件 docker文件: FROM kong:latest USER root RUN apk update && apk add git unzip luarocks RUN luarocks install kong-oidc USER kong 在token中,我得到的范围类似于“openid配置文件电子邮件” 我正在查看基于作用域的restrict是如何存在的

我期待根据范围限制用户访问。我正在使用
kongapi网关
这是我的docker文件,用于添加
诺基亚oidc
插件

docker文件:

FROM kong:latest  
USER root
RUN apk update && apk add git unzip luarocks
RUN luarocks install kong-oidc  
USER kong
在token中,我得到的范围类似于“openid配置文件电子邮件”

我正在查看基于作用域的restrict是如何存在的,因为
openid
是默认值

它没有按预期工作。如果myscope不存在于令牌中,我仍然可以登录


请帮忙,提前谢谢

使用OIDC插件,您将无法执行身份验证,但可以执行授权

您必须使用插件:

它将从内部头
x-access-token
解析JWT令牌,并基于此,您可以通过作用域、领域角色和客户端角色对用户进行身份验证

使用此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插件

接下来,确保您的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
头,并且它不会给您在json配置中编辑它的选项,您必须编辑lua代码

在内部
/usr/local/share/lua/5.1/kong/plugins/jwt keydove/handler.lua
在cookie\u名称检查之后但在自动授权\u头检查之前添加以下行

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

你现在应该可以走了

谢谢你写下完整的答案。:)如果有人想通过环境变量设置优先级,JWT keydeport中的handler.lua文件会接受环境变量JWT_keydeport_priority。要在dockerfile中执行此操作,只需:ENV JWT_keydave_PRIORITY 900
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