Назад | Перейти на главную страницу

Обратный прокси и безопасность сервера приложений Java

Возможно ли, чтобы обратный прокси (Apache HTTP 2.2) обрабатывал аутентификацию (HTTP Basic), а затем по-прежнему использовал управляемую контейнером безопасность сервера приложений Java (GlassFish 3.1 или JBoss 7.0.2) для авторизации?

У меня есть GlassFish, которая обеспечивает безопасность, управляемую контейнером (как аутентификацию, так и авторизацию вместе), отлично используя декларативную и программную безопасность контейнера с аутентификацией на основе форм и настраиваемый модуль аутентификации GlassFish. У меня даже это работает через обратный прокси-сервер HTTP Apache с использованием mod_proxy_ajp. Теперь я просто пытаюсь найти способ передать часть аутентификации Apache, сохранив при этом часть авторизации безопасности, управляемую контейнером. Может быть, на сервере приложений Java есть интерфейс единой регистрации, который облегчил бы это (поскольку это похоже на SSO - Apache требует аутентификации для всего, что за ним стоит)?

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

Ниже приведен пример того, как это мощь быть возможно через вставку заголовка. Прошу прощения за предложение того, что я не пробовал сам, но это кажется разумным, да?

RequestHeader unset REMOTE-USER
RequestHeader add REMOTE-USER %{REMOTE-USER}e

Однако я подозреваю, что когда эта переменная среды будет, она всегда будет иметь значение null, если вы проксируете. В этом случае вы можете использовать прогнозные переменные с помощью 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.