Auth Proxy-Authentifizierung
Sie können SmartCollect SC² so konfigurieren, dass ein HTTP-Reverse-Proxy die Authentifizierung übernimmt. Gängige Webserver haben eine sehr umfangreiche Liste von steckbaren Authentifizierungsmodulen, und jedes von ihnen kann mit der AuthProxy-Funktion verwendet werden. Im Folgenden werden die Konfigurationsoptionen für den AuthProxy detailliert beschrieben.
[auth.proxy]
# Defaults to false, but set to true to enable this feature
enabled = true
# HTTP Header name that will contain the username or email
header_name = X-WEBAUTH-USER
# HTTP Header property, defaults to `username` but can also be `email`
header_property = username
# Set to `true` to enable auto sign up of users who do not exist in SmartCollect SC² DB. Defaults to `true`.
auto_sign_up = true
# Define cache time to live in minutes
# If combined with SmartCollect SC² LDAP integration it is also the sync interval
sync_ttl = 60
# Limit where auth proxy requests come from by configuring a list of IP addresses.
# This can be used to prevent users spoofing the X-WEBAUTH-USER header.
# Example `whitelist = 192.168.1.1, 192.168.1.0/24, 2001::23, 2001::0/120`
whitelist =
# Optionally define more headers to sync other user attributes
# Example `headers = Name:X-WEBAUTH-NAME Email:X-WEBAUTH-EMAIL Groups:X-WEBAUTH-GROUPS`
headers =
# Check out docs on this for more details on the below setting
enable_login_token = false
Demonstration, wie man Apache für die Authentifizierung von Benutzern verwendet. In diesem Beispiel verwenden wir BasicAuth mit dem textdateibasierten Authentifizierungshandler von Apache, d. h. htpasswd-Dateien. Es können jedoch alle verfügbaren Apache-Authentifizierungsfunktionen verwendet werden.
In diesem Beispiel verwenden wir Apache als Reverse-Proxy vor SmartCollect SC². Der Apache kümmert sich um die Authentifizierung der Benutzer, bevor er die Anfragen an den SmartCollect SC² Backend-Dienst weiterleitet.
<VirtualHost *:80>
ServerAdmin webmaster@authproxy
ServerName authproxy
ErrorLog "logs/authproxy-error_log"
CustomLog "logs/authproxy-access_log" common
<Proxy *>
AuthType Basic
AuthName SmartCollect SC²AuthProxy
AuthBasicProvider file
AuthUserFile /etc/apache2/smartcollect_htpasswd
Require valid-user
RewriteEngine On
RewriteRule .* - [E=PROXY_USER:%{LA-U:REMOTE_USER},NS]
RequestHeader set X-WEBAUTH-USER "%{PROXY_USER}e"
</Proxy>
RequestHeader unset Authorization
ProxyRequests Off
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
</VirtualHost>
-
Die ersten vier Zeilen der virtualhost-Konfiguration sind Standard, daher werden wir nicht näher darauf eingehen, was sie tun.
-
Wir verwenden einen
-Konfigurationsblock für die Anwendung unserer Authentifizierungsregeln auf jede Proxy-Anfrage. Zu diesen Regeln gehört das Erfordernis einer Basisauthentifizierung, bei der die Benutzer:Passwort-Anmeldedaten in der Datei /etc/apache2/smartcollect_htpasswd gespeichert werden. Diese Datei kann mit dem Befehl htpasswderstellt werden.-
Der nächste Teil der Konfiguration ist der knifflige Teil. Wir verwenden die Rewrite-Engine von Apache, um unseren X-WEBAUTH-USER-Header zu erstellen, der mit dem authentifizierten Benutzer gefüllt wird.
-
RewriteRule . - [E=PROXY_USER:%{LA-U:REMOTE_USER}, NS]*: Diese Zeile ist ein kleines Stück Magie. Sie verwendet für jede Anfrage die Vorausschau-Funktion (LA-U) von rewriteEngines, um zu ermitteln, auf welchen Wert die Variable REMOTE_USER nach der Verarbeitung der Anfrage gesetzt werden würde. Weisen Sie das Ergebnis dann der Variablen PROXY_USER zu. Dies ist notwendig, da die Variable REMOTE_USER für die Funktion RequestHeader nicht verfügbar ist.
-
RequestHeader setzt X-WEBAUTH-USER “%{PROXY_USER}e “: Mit dem authentifizierten Benutzernamen, der nun in der PROXY_USER-Variable gespeichert ist, erstellen wir einen neuen HTTP-Request-Header, der an unser Backend SmartCollect SC² gesendet wird und den Benutzernamen enthält.
-
-
-
Mit RequestHeader unset Authorization wird der Authorization-Header aus der HTTP-Anfrage entfernt, bevor sie an SmartCollect SC² weitergeleitet wird. Dadurch wird sichergestellt, dass SmartCollect SC² nicht versucht, den Benutzer mit diesen Anmeldeinformationen zu authentifizieren (BasicAuth ist ein unterstützter Authentifizierungs-Handler in SmartCollect SC²).
-
Die letzten 3 Zeilen sind dann nur eine Standard-Reverse-Proxy-Konfiguration, um alle authentifizierten Anfragen an unseren SmartCollect SC²-Server zu leiten, der auf Port 3000 läuft.
- Erstellen Sie eine Datei
smartcollect.inimit folgendem Inhalt
[users]
allow_sign_up = false
auto_assign_org = true
auto_assign_org_role = Editor
[auth.proxy]
enabled = true
header_name = X-WEBAUTH-USER
header_property = username
auto_sign_up = true
Starten Sie den SmartCollect SC²-Container, indem Sie unsere benutzerdefinierte smartcollect.ini verwenden, um /etc/smartcollect/smartcollect.ini zu ersetzen. Wir stellen keine keine Ports für diesen Container, da er nur von unserem Apache-Container verbunden wird.
docker run -i -v $(pwd)/smartcollect.ini:/etc/smartcollect/smartcollect.ini --name smartcollect smartcollect/smartcollect
- Erstellen Sie eine Datei
httpd.confmit folgendem Inhalt
ServerRoot "/usr/local/apache2"
Listen 80
LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule headers_module modules/mod_headers.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<IfModule unixd_module>
User daemon
Group daemon
</IfModule>
ServerAdmin you@example.com
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/usr/local/apache2/htdocs"
ErrorLog /proc/self/fd/2
LogLevel error
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog /proc/self/fd/1 common
</IfModule>
<Proxy *>
AuthType Basic
AuthName SmartCollect SC²AuthProxy
AuthBasicProvider file
AuthUserFile /tmp/htpasswd
Require valid-user
RewriteEngine On
RewriteRule .* - [E=PROXY_USER:%{LA-U:REMOTE_USER},NS]
RequestHeader set X-WEBAUTH-USER "%{PROXY_USER}e"
</Proxy>
RequestHeader unset Authorization
ProxyRequests Off
ProxyPass / http://smartcollect:3000/
ProxyPassReverse / http://smartcollect:3000/
-
Erstellen Sie eine htpasswd-Datei. Wir erstellen einen neuen Benutzer anthony mit dem Passwort password.
htpasswd -bc htpasswd anthony password -
Starten Sie den httpd-Container mit unserer benutzerdefinierten httpd.conf und unserer htpasswd-Datei. Der Container wird auf Port 80 lauschen, und wir erstellen einen Link zum smartcollect-Container, damit dieser Container den Hostnamen smartcollect zur IP-Adresse des SmartCollect SC²-Containers auflösen kann.
docker run -i -p 80:80 --link smartcollect:smartcollect -v $(pwd)/httpd.conf:/usr/local/apache2/conf/httpd.conf -v $(pwd)/htpasswd:/tmp/htpasswd httpd:2.4
Wenn unsere SmartCollect SC²- und Apache-Container laufen, können Sie sich jetzt mit http://localhost/ verbinden und sich mit dem Benutzernamen/Passwort anmelden, das wir in der htpasswd-Datei erstellt haben.
Wenn enable_login_token auf true gesetzt ist, weist SmartCollect SC² dem Benutzer nach erfolgreicher Validierung des Auth-Proxy-Headers
ein Login-Token und ein Cookie zu. Sie müssen Ihren Autorisierungs-Proxy nur so konfigurieren, dass er Header für die /login-Route bereitstellt.
Anfragen über andere Routen werden mit Hilfe des Cookies authentifiziert.
Verwenden Sie die Einstellungen login_maximum_inactive_lifetime_days und login_maximum_lifetime_days unter [auth] zur Steuerung der Sitzungs
Lebensdauer. Lesen Sie mehr über Login-Tokens