
직장에서 Apache2를 통해 관리되는 URL에 액세스할 때 사용자가 특정 LDAP 그룹의 구성원인지 여부에 따라 사용자를 리디렉션하려는 문제가 있습니다.
세 가지 경우가 있습니다:
- 사용자가 유효한 자격 증명을 제공하고 LDAP 그룹의 IS 구성원 => 애플리케이션 ABC로 리디렉션(작동)
- 사용자가 유효한 자격 증명을 제공했지만 LDAP 그룹의 구성원이 아닙니다. => 유지 관리 페이지로 리디렉션됩니다(작동하지 않으며 문제임)
- 사용자가 잘못된 자격 증명을 제공하거나 취소를 클릭하면 => 유지 관리(작동)로 리디렉션됩니다.
문제는: 사용자가 유효하고 LDAP 그룹 "THE-GROUP"의 구성원이 아닌 경우 어떻게 사용자를 리디렉션할 수 있습니까?
지금은 취소를 클릭하거나 "THE-GROUP"의 구성원을 클릭하지 않는 한 자격 증명을 입력하는 오버레이가 무한정 표시됩니다.
우리 애플리케이션 ABC는 우리 구내에서 호스팅되며 Ubuntu에서 실행됩니다. 우리의 역방향 프록시는 Ubuntu 16.04에서 실행되는 Apache 2.4.18-2ubuntu3.10입니다. 클라이언트는 전 세계의 다양한 브라우저와 OS를 사용하므로 IP로 필터링하는 것은 옵션이 아닙니다. 역방향 프록시는 DMZ에 있고 App-Server는 외부에 있습니다. NAT 규칙이 생성되어 두 시스템 모두 8080(ABC가 실행되는 포트)을 통해 통신할 수 있습니다.
(테스트) 구성은 다음과 같습니다.
<VirtualHost *:443>
ServerName testabc.company.com
SSLProxyEngine On
SSLEngine On
SSLCertificateKeyFile /etc/ssl/private/our_company.key
SSLCertificateFile /etc/ssl/certs/company_com/fullchain.cer
ErrorLog ${APACHE_LOG_DIR}/LDAP_test_error.log
CustomLog ${APACHE_LOG_DIR}/LDAP_test_access.log combined
# error document shown to unauthorized users
DocumentRoot /var/www/Maintenance_Page
ErrorDocument 401 /TTT/index.html
<Location />
ProxyPass http://internal-vm-name:8080/
ProxyPassReverse http://internal-vm-name:8080/
</Location>
# the following block applies to all proxied content
<Proxy "*">
AuthType Basic
AuthBasicProvider ldap
AuthUserFile /dev/null
AuthName "Auth with our LDAP Server"
# configuration of the mod_authnz_ldap module
AuthLDAPURL "ldap://SOMETHING"
AuthLDAPBindDN "FOO,BAR "
AuthLDAPBindPassword "FOOBAR"
# Only users belonging to group THE-GROUP can access ABC,
# all others will see the error document specified above.
Require ldap-group CN=THE-GROUP,OU=Company,DC=ad,DC=Company,DC=com
</Proxy>
</VirtualHost>
# virtual host required to access images and style-sheets from the error document
<VirtualHost *:80>
ServerName maintenance.company.com
DocumentRoot /var/www/Maintenance_Page
ErrorLog ${APACHE_LOG_DIR}/maintenance -error.log
CustomLog ${APACHE_LOG_DIR}/maintenance.log combined
</VirtualHost>
# redirection from HTTP to HTTPS
<VirtualHost *:80>
ServerName abc.company.com
Redirect Permanent / https://abc.company.com/
Redirect / https://abc.company.com/
</VirtualHost>
답변1
귀하의 문제에 대한 좋은 해결책은 없습니다. HTTP 기본 인증을 사용하고 있습니다. 이는 브라우저가 페이지를 열려고 하고 WWW-Authenticate: Basic realm="Whatever" 헤더가 전송되면서 401 상태를 받고 있음을 의미합니다.
이 시점에서 브라우저는 인증 대화 상자를 표시하고 사용자와 비밀번호가 입력되면 Authorization 헤더 내부의 웹 서버로 전송됩니다.
서버가 요청을 거부하면 WWW-Authenticate 헤더와 함께 401 상태를 다시 보냅니다. 브라우저는 대화 상자를 무한정 다시 팝업합니다. 어떤 경우에도 서버는 비밀번호가 영구적으로 거부되었다고 말할 수 없습니다.
mod_dbd 지원 데이터베이스를 사용하는 경우 mod_rewrite를 사용하여 그룹에 대한 SQL 쿼리를 수행하고 그에 따라 리디렉션할 수 있습니다. 나는 이것이 LDAP 인증 처리기로 가능하다고 생각하지 않습니다.