kong с keycloak Авторизация на основе области действия

я с нетерпением жду ограничения доступа пользователей в зависимости от области действия. я использую Kong API gateway вот мой файл докера, используемый для добавления плагина nokia-oidc. https://github.com/nokia/kong-oidc

файл докера:

FROM kong:latest  
USER root
RUN apk update && apk add git unzip luarocks
RUN luarocks install kong-oidc  
USER kong

в токене я получаю область, такую ​​​​как электронная почта профиля openid

"session_state": "8d408ace-4692-458c-a7d0-69b19c1ded11",
  "acr": "0",
  "allowed-origins": [
    "*"
  ],
  "scope": "openid profile email",

я смотрю, как ограничение, используемое на основе области действия, существует или нет, поскольку openid используется по умолчанию.

Selection_078

это не работает, как ожидалось. если myscope не существует в токене, я все равно могу войти в систему.

помогите заранее спасибо...!


person chagan    schedule 22.06.2020    source источник


Ответы (2)


С плагином OIDC вы не сможете выполнить аутентификацию, но вы можете выполнить авторизацию

Вы должны использовать плагин: https://github.com/gbbirkisson/kong-plugin-jwt-keycloak

Который будет анализировать токен JWT из внутреннего заголовка x-access-token и на основе этого вы можете аутентифицировать пользователя с помощью области действия, роли области и ролей клиента.

Используйте этот докер, чтобы добавить плагин в 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 плагина.

person Harsh Manvar    schedule 01.07.2020
comment
Если кто-то хочет установить свой приоритет с помощью переменной среды, файл handler.lua в JWT-Keycloak принимает переменную среды JWT_KEYCLOAK_PRIORITY. Для этого в dockerfile просто: ENV JWT_KEYCLOAK_PRIORITY 900 - person Woody; 21.05.2021

Ответ Харша неполный, установите плагин 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 и не дает вам возможности редактировать его в конфигурациях json, вам придется редактировать код lua.

Внутри /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

Тебе должно быть хорошо идти сейчас

person Woody    schedule 16.12.2020
comment
спасибо, что написали ответ. :) - person Harsh Manvar; 30.01.2021