Авторизация с управлением ролями через обратный прокси-сервер Apache2

Авторизация с управлением ролями через обратный прокси-сервер Apache2

Изначальноразмещено на SO, но я думаю, что это больше относится сюда. Предложения, комментарии и в идеале решения, будут приветствоваться ! (кстати, я удалю SO Thread, если это было не по адресу)

Мне нужно настроить обратный прокси-сервер для предоставления ограниченного доступа извне к внутреннему серверу. Вот основные требования:

  • Перенаправлять запросы отhttps://www.example.comкhttp://внутреннийсервер(сделанный)
  • Положитесь на простой, но проверенный механизм аутентификации. (в настоящее время работает)
  • Управляйте ролями пользователей, добавляя некоторые параметры GET к URL-адресу. (но как?)
  • На сервере размещено приложение Java. У меня пока нет к нему доступа, и код приложения не подлежит изменению. Это не должно иметь значения.

Я установил и настроилmod_proxy, и перенаправление работает нормально.
Авторизация использует apache2базовая аутентификация, что должно быть достаточно с точки зрения безопасности.

Теперь моя проблема в управлении ролями. Мне нужно изменить запросы так, чтобы у пользователя foo были права администратора, а у пользователя bar — нет. Это должно быть так же просто, как установить один параметр GET, например "&role=admin", но я не знаю, как это сделать при проксировании запросов.

Роли в настоящее время хранятся в выделенной базе данных MySQL, поэтому для получения привилегий нужен только запрос, который легко сделать в PHP. Моя проблема в том, что я не знаю, как сохранить поведение прокси, если я вызываю страницу php. Я хочу, чтобы каждый запрос имел добавленный параметр(ы) роли, но нужно сохранить остальную часть запроса без изменений.

Мой текущий прокси делает все с конфигурацией виртуального хоста (псевдоним .htaccess), но я понятия не имею, какой подход мог бы работать. Я не могу делать запросы MySQL в VHost, а перенаправление на страницу php будет -насколько я знаю- «сломать» концепцию прокси, так как я бы перенаправил, но, вероятно, потерял бы «другие параметры запроса», что мне не очень понятно, так как я никогда не пользовался прокси.

libapache2-mod-auth-mysqlВозможно, это было бы решением, но мод, похоже, устарел, так что я даже не смог его попробовать . Может ли mod_authn_dbd быть решением? Пока что мне не удалось войти с его помощью, но я не уверен, что он сможет решить мою потребность в добавлении параметра get.

У меня заканчиваются идеи.
Как я могу реализовать то, что мне нужно? Я почти уверен, что для такой распространенной потребности существует простое решение.

решение1

Единственное, что приходит на ум, — написать свой собственный простой прокси, например, на php/curl. Apache будет служить веб-сервером с поддержкой php, а php/curl будет проксировать запросы и изменять параметры GET в соответствии с предоставленным именем пользователя. Можно даже сделать аутентификацию с поддержкой cookie, а не только HTTP.

Вы также можете попробовать сделать то же самое, используя nginx, HTTP-аутентификацию и модуль lua nginx, но это по сути то же самое, за исключением необходимости писать прокси на lua — lua будет только решать, заслуживает ли пользователь роли администратора или нет, а nginx будет проксировать запросы и изменять аргументы GET.

Связанный контент