Обратный прокси и безопасность сервера приложений Java
Возможно ли, чтобы обратный прокси-сервер (Apache HTTP 2.2) обрабатывал аутентификацию (HTTP Basic), а затем все еще использовал управляемую контейнером безопасность сервера приложений Java (GlassFish 3.1 или JBoss 7.0.2) для авторизации?
У меня есть GlassFish, который прекрасно выполняет управляемую контейнером безопасность (как аутентификацию, так и авторизацию), используя как декларативную, так и программную безопасность контейнера с аутентификацией на основе форм и пользовательским модулем аутентификации GlassFish. Я даже заставил это работать через обратный прокси-сервер Apache HTTP с помощью mod_proxy_ajp. Сейчас я просто пытаюсь найти способ перенести часть аутентификации в Apache, сохраняя при этом часть авторизации безопасности, управляемой контейнером. Может быть, на сервере приложений Java есть интерфейс единой регистрации, который бы облегчил это (поскольку это похоже на SSO - Apache требует аутентификации для всего, что стоит за ним)?
1 ответ
Пользовательские данные доступны для CGI, таких как переменные среды. Вам придется как-то передать это - либо через какой-то шлюз cgi, либо, возможно, вставив их в заголовок.
Ниже приведен пример того, как это может быть возможно путем вставки заголовка. Я прошу прощения за то, что предложил что-то, что я не пробовал сам, но это кажется разумным, да?
RequestHeader unset REMOTE-USER
RequestHeader add REMOTE-USER %{REMOTE-USER}e
Я подозреваю, однако, что когда эта переменная окружения будет иметь значение, она всегда будет нулевой, если вы используете прокси. Если это так, вы можете использовать переменные прогнозирования, используя mod_rewrite. (См. Документацию mod_rewrite для примера LA-U и объяснения.)
RequestHeader unset REMOTE-USER
RewriteCond %{LA-U:REMOTE_USER} (.*)
RewriteRule .* - [E=MY_REMOTE_USER:%1]
RequestHeader add REMOTE-USER %{MY_REMOTE_USER}e
Это требует mod_rewrite и mod_headers.