SmartCollect SC² Dokumentation / Index.md / Auth Proxy-Authentifizierung

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

Apache’s auth zusammen mit SmartCollect SC²'s AuthProxy arbeiten lassen

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.

Apache BasicAuth

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.

Apache configuration

    <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 htpasswd erstellt 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.

Full walkthrough using Docker.

  • Erstellen Sie eine Datei smartcollect.ini mit 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

Apache Container

  • Erstellen Sie eine Datei httpd.conf mit 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
    

Use Smartcollect SC²

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