Ingress-Nginx: Как добавить атрибуты из ответа на самоанализ на проксированный запрос

#nginx #kubernetes #oauth-2.0 #identityserver4 #ingress-nginx

Вопрос:

Я запускаю приложение на основе микросервиса с рядом базовых служб и службой токенов Oauth, использующей IdentityServer4. Я хотел бы провести самоанализ токенов с помощью службы идентификации непосредственно с контроллера входа, который, как я полагаю, поддерживается (https://kubernetes.github.io/ingress-nginx/examples/auth/oauth-external-auth/) — а затем проверьте, разрешен ли пользователю доступ в зависимости от его роли на прикладном уровне в различных службах.

В моем ответе на самоанализ у меня есть ценная информация, которую я хочу передать своим различным службам (роль, имя пользователя, адрес электронной почты и т. Д.) С моего контроллера входа после завершения самоанализа. Документация по использованию oauth в ingress-nginx полностью отсутствует. Мне интересно, знает ли кто-нибудь о том, поддерживается ли это, и если да, то как я это реализую.

Ответ №1:

Недавно я посмотрел на то же самое для NGINX и Kong и пришел к такому выводу:

  • Сначала используйте универсальный балансировщик входа / нагрузки
  • За ним следует обратный прокси-сервер / шлюз API для определенных маршрутов
  • За ним следует фактический серверный API

Вы сможете настроить второй слой так, как вам нравится, например, настроить файл nginx.conf и добавить плагины LUA.

Но первый слой, как правило, использует свои собственные шаблоны nginx, которые сильно отличаются от шаблонов по умолчанию. Новый экземпляр шаблона входа запускается всякий раз, когда вы предоставляете новую службу Kubermetes. По сути, вход-это роль сервера, отличная от роли обратного прокси-сервера, и она не предназначена для настройки таким же образом.

В Curity мы выполняем довольно много работы, связанной с OAuth, и я бы рекомендовал достигать ваших целей следующим образом:

  • Оставьте вход в покое
  • Выполните самоанализ на уровне обратного прокси-сервера после входа, чтобы вы могли добавить свою логику самоанализа (и любую другую) с помощью сценариев LUA. OpenResty и Kong с открытым исходным кодом — оба хороших варианта.
  • Мы называем это паттерном фантомного токена
  • Вот пример реализации LUA, которую вы можете подключить, и обратите внимание, что кэширование результатов является важной частью решения для обеспечения хорошей производительности