Apache OpenID · 9 min read · Dec 27, 2025

Installieren und Konfigurieren des Apache-Moduls für OpenID-Authentifizierung

Apache-Modul für OpenID-Authentifizierung

OpenID ist eine weit verbreitete Technologie zur Benutzer-Authentifizierung in Webanwendungen. Sie basiert auf den Konzepten der verteilten Benutzer-Authentifizierung in Blog-Anwendungen. Dieses kleine Kochbuch erklärt Schritt für Schritt, wie man das Open Source Apache-Modul mod_auth_oid installiert und konfiguriert.

Der beabsichtigte Zweck dieses Moduls ist es, eine einfache Relying Party-Implementierung bereitzustellen, die verwendet werden kann, um den Zugriff auf auf Apache basierende Webanwendungen und Ressourcen zu schützen. Das Modul implementiert nicht alle in der offiziellen Spezifikation beschriebenen Funktionen. Dennoch sind seine Funktionen bereits reif genug, um eine komfortable Anmeldebenutzbarkeit für Ihre Anwendungen und Benutzer zu bieten.

Es sind auch zwei zusätzliche Module enthalten, die das Authentifizierungsmodul mit der Fähigkeit erweitern, Benutzer-IDs nicht nur über die Apache-Konfiguration, sondern auch über eine lokale Zuordnungsdatei (die möglicherweise bereits von anderen Anwendungen existiert) oder über Ldap zuzuordnen.

Sicherheitswarnung: Das Modul unterstützt keine Protokollerweiterungen wie PAPE. Daher wird die Verwendung in Umgebungen mit höheren Anforderungen an den Datenschutz, wie im Gesundheitswesen oder bei finanziellen Transaktionen, nicht empfohlen.

Installation

Voraussetzungen

Um dieses Apache-Modul zu installieren, müssen die folgenden Anforderungen erfüllt sein:

  • Apache 2.2 einschließlich mod_ssl, mod_proxy, mod_include, Header-Dateien und apxs/apxs2 (oft als apache2 und apache2-devel-Pakete bezeichnet).
  • Apache-Modul mod_parp für die Parameteranalyse. Holen Sie es sich hier. Die Installation ist unkompliziert: Verwenden Sie sudo oder melden Sie sich als root an: $ tar xvBzf mod_parp-0.10-src.tar.gz $ cd mod_parp-0.10 $ sudo apxs2 -i -c apache2/mod_parp.c $ sudo chmod 755 /usr/lib64/apache2/mod_parp.so

Hauptmodul

Laden Sie den Quellcode von hier herunter und entpacken Sie ihn.

$ tar xvBzf mod_auth_oid-2.0-src.tar.gz  
 $ cd mod_auth_oid-2.0  
 $ sudo apxs2 -i -c -I . -D AOID_MOD_EXT_HOOKS apache2/mod_auth_oid.c -lcrypto -lparp

*Optional: Es gibt zusätzliche Module, die mit dem Quellcode geliefert werden. Wenn Sie auch das hochgradig empfohlene zusätzliche Modul mod_auth_oid_file.c oder mod_auth_oid_ldap.c verwenden möchten, kompilieren und installieren Sie diese ebenfalls mit einem der folgenden Befehle.*

$ sudo apxs2 -i -c -I . apache2/mod_auth_oid_file.c  
 $ sudo apxs2 -i -c -I . apache2/mod_auth_oid_ldap.c

Konfiguration

Serverabschnitt

Die folgenden Apache-Standardmodule sind erforderlich:

  • mod_ssl (stellt Verschlüsselungsroutinen bereit, die von mod_auth_oid verwendet werden)
  • mod_proxy (stellt Funktionen für mod_auth_oid bereit, um Anfragen an die OpenID-Anbieter zu senden)
  • mod_include (stellt das Rendern von shtml-Seiten bereit)

Aktivieren Sie die Module in Ihrem globalen Konfigurationsabschnitt von Apache. Passen Sie den Dateipfad entsprechend Ihrem Dateisystemlayout an. Es ist auch wichtig, dass die Module nach mod_ssl geladen werden. Platzieren Sie daher diese Zeilen am Ende Ihres LoadModule-Blocks von Apache. Kommentieren Sie die letzten beiden Zeilen mit den Zuordnungsmodulen aus, wenn Sie diese ebenfalls verwenden möchten. Wenn Ihre Distribution einen individuellen Stil zum Laden von Modulen hat, tun Sie dies bitte gemäß deren Anweisungen (z. B. platzieren Sie die folgenden Zeilen in einer Datei, die automatisch eingeschlossen wird, wenn sie sich in einem bestimmten Verzeichnis wie modules-enabled oder ähnlichem befindet.

  LoadModule parp_module                    /usr/lib64/apache2/mod_parp.so
  LoadModule auth_oid_module                /usr/lib64/apache2/mod_auth_oid.so
  # LoadModule auth_oid_file_module           /usr/lib64/apache2/mod_auth_oid_file.so
  # LoadModule auth_oid_ldap_module           /usr/lib64/apache2/mod_auth_oid_ldap.so

Versuchen Sie, Ihren Server neu zu starten. Wenn das Modul korrekt geladen ist, sollte es im Fehlerprotokoll des Servers gemeldet werden:

[Sun Nov 06 12:10:59 2011] [notice] Apache/2.2.17 (Linux/SUSE) mod_ssl/2.2.17 OpenSSL/1.0.0c mod_auth_oid/2.0 konfiguriert -- normale Operationen werden fortgesetzt

VirtualHost-Abschnitt

Jetzt ist es an der Zeit, die spezifische Konfiguration zum Schutz Ihrer Anwendung vorzubereiten. Bearbeiten Sie Ihre VirtualHost-Konfiguration. Natürlich sollte es Ihr https VirtualHost sein, da wir hier mit Sicherheit zu tun haben. Und ersetzen Sie mein OpenID YOURNAME durch Ihre eigene OpenID, andernfalls könnte YOURNAME eines Tages Ihre Kronjuwelen stehlen. ;) Wenn Sie Google als Ihren OpenID-Anbieter verwenden möchten, müssen Sie einen etwas anderen Weg gehen und ein AOID_UserPattern hinzufügen, da Google den Ansatz der gerichteten Identität mit undurchsichtigen OpenIDs pro Site verwendet. Im letzten Kapitel dieses Howtos, das Eingrenzen des Namensraums Ihrer bevorzugten OpenID-Anbieter heißt, wird die Konfigurationsanweisung anhand eines Google-Beispiels erklärt.

Wir gehen davon aus, dass die Ressource, die wir schützen möchten, der Standort /private ist und der Authentifizierungs-Handler sich unter /aoid befindet. Die folgenden Abschnitte sind kommentiert, um anzuzeigen, was Sie tun müssen.

       # Eine vollständige Referenz aller verfügbaren Konfigurationsoptionen
       # ist verfügbar unter: http://auth-openid.sourceforge.net/
       # Vorsicht: Aktivieren Sie bei vertrauenswürdigen CAs, indem Sie sie in cacerts einfügen
       # Verlinken Sie sie mit Hashnamen, wie in der Apache-Dokumentation beschrieben
       # http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#sslproxycacertificatepath
       SSLProxyEngine            on
       SSLProxyCACertificatePath /etc/ssl/cacerts

       # Verwenden Sie das HttpOnly-Flag, um XSS-Angriffe auf das Sitzungscookie zu verhindern
       BrowserMatch              "Mozilla.*Firefox/(3|4)" HttpOnlyCookie
       BrowserMatch              "MSIE [6789]"            HttpOnlyCookie
       BrowserMatch              "Opera/(10|9\.[56789])"  HttpOnlyCookie
       BrowserMatch              Secure SecureCookie

       # mod_auth_oid Basiseinstellungen
       AOID_Realm                /
       AOID_StartPage            /private/index.html
       AOID_LogLevel             info
       AOID_LoginPath            /aoid/login
       AOID_LoginSuffix          .shtml
       AOID_Timeout              300
       AOID_CookieName           AJESSIONID

       # OpenID-Benutzermapping. Zusätzliche Möglichkeiten sind beschrieben
       # im Kapitel "Lokale Dateizuordnung" der Howtoforge-Seite
       # erlaubte/bekannte Benutzer ERSETZEN SIE MIT IHREM OPENID
       AOID_User http://YOURNAME.myopenid.com/ YOURNAME

       # Erzwingen Sie die Benutzer-Authentifizierung von mod_auth_oid für den folgenden Standort
       
         AuthType OpenID
         Require valid-user
       

       # mod_auth_oid Anmeldeseite
       # Aktivieren Sie SSI für die Anmeldeseite (benötigt mod_include)
       
          Options            Includes
          AddType            text/html .shtml
          AddOutputFilter    INCLUDES .shtml
       

Dateien

Erstellen Sie jetzt ein Verzeichnis mit dem Namen private im DocumentRoot Ihres VirtualHost, das den Inhalt enthält, den Sie schützen möchten. Fügen Sie beispielsweise eine index.html-Datei hinzu, die sagt: “Yeahh!! mod_auth_oid rocks und ich habe 127.0.0.1 gehackt!.

Zusätzlich benötigen Sie eine Anmeldeseite im Verzeichnis aoid, die sich ebenfalls im DocumentRoot befindet. Als Ausgangspunkt können Sie die Beispiel-SHTML-Seite aus dem Verzeichnis htdocs im Tarball verwenden. Kopieren Sie sie einfach auch in Ihr htdocs. Überprüfen Sie die Berechtigungen der neu erstellten Dateien, ob sie den Vorlieben Ihres Webservers entsprechen.

Jetzt können Sie Ihren Apache erneut neu starten. Bitte überprüfen Sie das error.log, um sicherzustellen, dass alles in Ordnung ist.

Testen Sie Ihre Installation

Öffnen Sie jetzt Ihren Browser. Wenn Sie alles richtig gemacht haben und auch Ihr Apache, sollten Sie eine Anmeldeseite sehen, wenn Sie Ihren Browser auf die folgende URL richten: https://YOURHOST/private/index.html

Wählen Sie Ihren Anbieter aus und senden Sie ab. Das Modul leitet Sie zu Ihrem Anbieter weiter, wo Sie sich anmelden, und wenn es erfolgreich war, werden Sie zu Ihrer privaten Anwendung zurückgeschickt. Wenn Sie Google wählen, senden Sie einfach die vorgeschlagene OP-Identifikation, in den beiden anderen Fällen geben Sie Ihre OpenID in den hervorgehobenen Teil ein. Später im Howto wird eine viel bequemere Lösung für eine schick aussehende Anmeldeseite beschrieben.

Debugging, falls etwas schiefgeht

Im unwahrscheinlichen Fall, dass etwas nicht wie erwartet funktioniert, haben Sie mehrere Hinweise darauf, was möglicherweise im error.log Ihres Apache-Servers falsch ist. Die Protokollnachrichten sollten anzeigen, was fehlschlägt. Eine detaillierte Liste der möglichen Fehlercodes und wie man ein höheres Loglevel aktiviert, finden Sie auf der mod_auth_oid-Seite.

Zusätzliche Optionen

Schicke Anmeldeseite

Ich nehme an, dass Sie wie ich sind, und eines der ersten Dinge, die Sie sehen möchten, ist eine schön aussehende Anmeldeseite im Browser. Sieht so etwas cool genug für Ihren Geschmack aus?

Schicke Anmeldeseite

Diese professionell aussehende Anmeldeseite wurde mit dem Open Source-Projekt openid-selector erstellt, das eine benutzerfreundliche Möglichkeit bietet, eine OpenID auszuwählen.

Nach der Erstellung der Anmeldeseite muss sie mit dem SHTML-Include-Zeug von mod_auth_oid erweitert werden. Ich habe den Fehlerdarstellungsbereich von der ursprünglichen Anmeldeseite in die generierte HTML-Seite von openid-selector eingefügt. Mein Beispiel der angepassten Seite kann hier heruntergeladen werden.

Lokale Benutzer-ID-Zuordnung

Wenn Sie auch das Modul mod_auth_oid_file kompiliert haben, können Sie Ihre Benutzer-ID-Datensätze auch in einer lokalen Datei zuordnen, anstatt sie alle in Ihre Apache-Konfigurationsdatei einzufügen. Die detaillierten Anweisungen finden Sie hier.

Lesen Sie das folgende Kapitel, um die Selbstregistrierung von Benutzern mit lokaler Dateizuordnung in einem Schritt hinzuzufügen.

Benutzer-Selbstverwaltung Eine OpenID-zu-lokale Benutzer-ID-Zuordnung

Angenommen, Sie haben bereits eine Benutzerverwaltung, die auf den .htpasswd-Dateien von Apache basiert, können Sie den folgenden Konfigurationsausschnitt verwenden, um sie zu erweitern, damit Benutzer OpenID-Konten mit ihren lokalen Konten registrieren können. Kopieren Sie die Datei file_mapper.html aus dem Tarball in Ihr htdocs.

  # Virtual Host Abschnitt
  AOID_File_DB              /etc/apache2/mapdb
  AOID_File_AdminPage       /usr/local/apache2/htdocs/file_mapper.html

  # Profilverwaltungsstandort
  # Passen Sie den Dateipfad entsprechend Ihrer vorhandenen .htpasswd-Datei an
  
    AuthUserFile            /srv/data/.htpasswd
    AuthName                'Geben Sie Ihren Login-Namen ein: Abbrechen, um sich zu registrieren, wenn Sie keinen haben.'
    AuthType                Basic
    Require                 valid-user
    SetEnvIf                Request_Method POST parp
    SetEnvIf                Request_Method GET parp
    SetHandler              auth-oid-file
    AOID_File_UserOnly      on
  

Jetzt erstellt mod_auth_oid_file eine mapdb-Datei, in der die Beziehung zwischen OpenID-Konten und lokalen .htpasswd-Konten gespeichert wird.

Sicherheitsüberlegungen

Relying Party Discovery-Dokument

OpenID empfiehlt, ein Relying Party Discovery-Dokument zu hosten, das eine ordnungsgemäße return_to-Adresse für den OpenID-Anbieter angibt. Yahoo wird Ihre Site als nicht vertrauenswürdig anzeigen, wenn Sie ein solches Dokument nicht bereitstellen. Weitere Informationen finden Sie hier.

Speichern Sie ein Dokument mit dem Namen openid.xrd im DocumentRoot Ihrer Site. Der Inhalt sollte ähnlich wie im folgenden Beispiel aussehen. Passen Sie es entsprechend Ihrer Einrichtung an.



    
        
            http://specs.openid.net/auth/2.0/return_to
            https://YOUR_HOST_HERE/aoid/login
        
    

Das Dokument muss dann entweder durch das Senden eines speziell gestalteten Headers mit jeder HTTP-Antwort referenziert werden oder es kann im Hauptdokument der Site enthalten sein.

Variante 1: Ankündigung über Header (empfohlen)

    LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
    # .......
Header set X-XRDS-Location https://YOUR_HOST_HERE/openid.xrd

Variante 2: Ankündigung im Kopfbereich des Haupt-HTML-Dokuments

  ....
  
  
  ....

Schutz vor DoS- und anderen Arten von Angriffen

DoS-Angriffe und Cross-Site-Request-Forgery sind heute ein großes Problem. Sie können Ihre Site effizient vor DoS-Angriffen mit einem anderen Open Source-Modul namens mod_qos schützen. Dieses Modul ist ein Schweizer Taschenmesser, wenn es darum geht, Ihren Server vor verschiedenen Arten von Angriffen zu schützen. Das Modul kann so einfach installiert werden wie jedes andere Apache-Modul. Das folgende Konfigurationsbeispiel zeigt eine grundlegende Konfiguration, die Ihre Site vor DoS-Angriffen und Cross-Site-Request-Forgery auf der Selbstverwaltungsseite schützt.

    # Serverabschnitt
    LoadModule qos_module /usr/lib/apache2/modules/mod_qos.so

    # behandelt Verbindungen von bis zu 100000 verschiedenen IPs
    QS_ClientEntries 100000

    # erlaubt nur 50 Verbindungen pro IP
    QS_SrvMaxConnPerIP 50

    # maximale Anzahl aktiver TCP-Verbindungen ist auf 256 begrenzt
    MaxClients              256 

    # deaktiviert Keep-Alive, wenn 70% der TCP-Verbindungen belegt sind:
    QS_SrvMaxConnClose      180

    # minimale Anfrage-/Antwortgeschwindigkeit (verhindert langsame Clients, die den Server blockieren, d.h. slowloris, die Verbindungen offen halten, ohne etwas anzufordern):
    QS_SrvMinDataRate       120 1500 400

    # und begrenzt Anfrageheader und -körper (vorsichtig, das begrenzt auch Uploads und POST-Anfragen):
    QS_SrvMaxConnClose      70%
    LimitRequestFields      30
    QS_LimitRequestBody     102400

    QS_ClientEventBlockCount 20 300
    QS_SetEnvIfStatus        400               QS_Block
    QS_SetEnvIfStatus        401               QS_Block
    QS_SetEnvIfStatus        403               QS_Block
    QS_SetEnvIfStatus        404               QS_Block
    QS_SetEnvIfStatus        405               QS_Block
    QS_SetEnvIfStatus        406               QS_Block
    QS_SetEnvIfStatus        408               QS_Block
    QS_SetEnvIfStatus        411               QS_Block
    QS_SetEnvIfStatus        413               QS_Block
    QS_SetEnvIfStatus        414               QS_Block
    QS_SetEnvIfStatus        417               QS_Block
    QS_SetEnvIfStatus        500               QS_Block
    QS_SetEnvIfStatus        503               QS_Block
    QS_SetEnvIfStatus        505               QS_Block
    QS_SetEnvIfStatus        QS_SrvMinDataRate QS_Block
    QS_SetEnvIfStatus        NullConnection    QS_Block

    QS_SrvMaxConnExcludeIP 127.0.0.1

    # CSRF-Schutz des Selbstregistrierungsformulars durch Festlegung
    # von vier Meilensteinen für die Profilverwaltung
    QS_MileStone          deny       "^GET /OpenIdLogin"
    QS_MileStone          deny       "^GET /OpenIDRegistration"
    QS_MileStone          deny       "^GET /profile"
    QS_MileStone          deny       "^POST /profile"

Eingrenzen des Namensraums Ihrer bevorzugten OpenID-Anbieter

Sie können einschränken, welchen OpenID-Anbieter Sie für die Authentifizierung Ihrer Website akzeptieren, indem Sie die Konfigurationsanweisung AOID_UserPattern verwenden. Die folgenden beiden Beispiele geben Ihnen eine grobe Vorstellung davon, wie Sie reguläre Ausdrücke zu diesem Zweck konstruieren können.

  # VirtualHost Abschnitt
  
  # Erlaubt nur Google OpenIDs
  AOID_UserPattern          "^(https://www\.google\.com/accounts/o8/id\?id=.*)$" "$1"

  # Erlaubt nur meine.company.com OpenIDs und verwendet nur einen Teil davon, um sie einem lokalen Benutzer zuzuordnen.
  AOID_UserPattern          "^https://my\.company\.com/([a-z]{1})[a-z]+\.([a-z]{2})[a-z]+$" "$1$2"

Schlussworte

Vielen Dank, dass Sie dieses Tutorial gelesen haben. Ich hoffe, Ihre Installation verlief reibungslos. Ich wünsche Ihnen, dass viele Benutzer von diesem Modul profitieren werden, und ich hoffe, es hat Ihnen Spaß gemacht, es zu installieren. Wenn Sie über die Entwicklungen des Moduls informiert bleiben möchten, können Sie unserer mod_auth_oid Facebook-Seite folgen.

Danksagungen: Ich möchte Pascal Buchbinder danken, der mich betreut hat, um dieses Apache-Modul zu verbessern und es mit der identifier_select-Methode zu erweitern. Er ist der Autor mehrerer Apache-Module wie mod_qos, mod_sslcrl, mod_parp und anderer.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.