Apache2 обратный прокси к конечной точке, которая требует BasicAuth, но хочет скрыть это от пользователя
в основном мой сценарий заключается в том, что у меня есть внутренний веб-сайт, для доступа к которому требуется одно жестко закодированное имя пользователя и пароль (и это нельзя отключить, только изменить). Я выставляю этот сайт через обратный прокси по разным причинам (скрытие порта, упрощение url, упрощение NAT и т. д.).
однако то, что я хотел бы сделать, это использовать Apache для обработки аутентификации, чтобы:
- Я не должен выдавать
одинпароль для всех Я могу иметь несколько имен пользователей и паролей, используя BasicAuth Apache- для внутренних пользователей мне не нужно запрашивать пароль
EDIT: вторая часть о более богатой аутентификации была перемещена в новому вопросу
вот более или менее то, что у меня есть сейчас:
<VirtualHost *:80>
ServerName sub.domain.com
ProxyPass / http://192.168.1.253:8080/endpoint
ProxyPassReverse / http://192.168.1.253:8080/endpoint
# The endpoint has a mandatory password that I want to avoid requiring users to type
# I.e. something like this would be nice (but does not work)
# ProxyPass / http://username:password@192.168.1.253:8080/endpoint
# ProxyPassReverse / http://username:password@192.168.1.253:8080/endpoint
# Also need to be able to require a password to access proxy for people outside local subnet
# However these passwords will be controlled by Apache using BasicAuth, not the ProxyPass endpoint
# Ideas?
</VirtualHost>
2 ответов
добавление или перезапись заголовка авторизации перед передачей любого запроса на конечную точку. Заголовок авторизации может быть жестко закодирован, это просто базовая кодировка 64 строки "username: password" (без кавычек.)
включить модуль mod_headers, если это еще не сделано.
RequestHeader set Authorization "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
чтобы выполнить это условно, включите mod_setenvif, например, по-прежнему запрашивать мастер-пароль в случае локального запросы:
SetEnvIf Remote_Addr "127\.0\.0\.1" localrequest
RequestHeader set Authorization "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" env=!localrequest
- http://en.wikipedia.org/wiki/Basic_access_authentication
- http://httpd.apache.org/docs/2.0/mod/mod_headers.html
- http://httpd.apache.org/docs/2.0/mod/mod_setenvif.html
пример
# ALL remote users ALWAYS authenticate against reverse proxy's
# /www/conf/passwords database
#
<Directory /var/web/pages/secure>
AuthBasicProvider /www/conf/passwords
AuthType Basic
AuthName "Protected Area"
Require valid-user
</Directory>
# reverse proxy authenticates against master server as:
# Aladdin:open sesame (Base64 encoded)
#
RequestHeader set Authorization "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
Ну, я использовал ваш пример, чтобы указать на две IP-камеры, используя Apache proxypass. Когда я использовал синтаксис user:password@camarafeliz3.compufiber.com и доступ через iphone я получил сообщение безопасности от safari (iPhone navigator), поэтому я изменил пример, чтобы хорошо работать с iPhone 4S
<Location /camarafeliz1/ >
# usuario admin password 123456
ProxyPass http://192.168.0.39/
ProxyPassReverse http://192.168.0.39/
RequestHeader set Authorization "Basic YWRtaW46MTIzNDU2=="
</Location>
<Location /camarafeliz3/ >
# usuario admin password 123456
ProxyPass http://192.168.0.99/
ProxyPassReverse http://192.168.0.99/
RequestHeader set Authorization "Basic YWRtaW46MTIzNDU2=="
</Location>
и iphone 4s перестал жаловаться на безопасность из-за пользователя и пароля в ссылке.