WSGI / Django: Übergeben Sie den Benutzernamen für das Zugriffsprotokoll an Apache zurück

8

Meine Django-App, die in mod_wsgi unter Apache mit dem Standard-WSGIHandler von Django bereitgestellt wird, authentifiziert Benutzer über das Formular-Login auf der Django-Seite. Für Apache ist der Benutzer also anonym. Dies macht das Apache Access Log weniger nützlich.

Gibt es eine Möglichkeit, den Benutzernamen nach der Verarbeitung der Anfrage über den WSGI-Wrapper an Apache zurückzugeben, so dass er im Apache-Zugriffsprotokoll erscheint?

(Versionen: Django 1.1.1, mod_wsgi 2.5, Apache 2.2.9)

    
Gunnlaugur Briem 11.02.2010, 12:03
quelle

4 Antworten

4

Sie können dies nur tun, wenn Sie den eingebetteten Modus verwenden, und nur wenn Sie ein separates Paket namens apswigpy verwenden, das eine Python-Bindung für das ursprüngliche Apache-Anforderungsobjekt bereitstellt. Das mod_wsgi-Paket bietet einen optionalen Mechanismus, mit dem das ursprüngliche Apache-Anforderungsobjekt als Python-CObject-Referenz in der WSGI-Umgebung übergeben werden kann. Sie verwenden das in Verbindung mit apswigpy so etwas wie:

%Vor%

Zumindest denke ich, dass das die entsprechenden Informationen aufbaut, die die Zugriffsprotokollierung dann verwenden kann.

Sie sollten diese Diskussion wirklich in die mod_wsgi Mailingliste aufnehmen.

    
Graham Dumpleton 11.02.2010, 22:21
quelle
3

Sie könnten mod_auth_tkt verwenden. Ein auth_tkt ist ein signiertes Cookie mit der Benutzer-ID, die Apache verstehen kann. Ihre Webanwendung müsste den Cookie festlegen , wenn sich der Benutzer an- und abmeldet . Apache kann ein REMOTE_USER vom Cookie ableiten, es an Ihre Web-App oder eine Nicht-Django-Webanwendung weitergeben, die auf demselben Server läuft, es in Logs aufnehmen, was auch immer.

    
joeforker 11.02.2010 22:30
quelle
1

Dies ist wahrscheinlich nicht das, was Sie erwarten, aber Sie könnten den Benutzernamen in Ihrem URL-Schema verwenden. Auf diese Weise befindet sich der Benutzer im Pfadbereich Ihrer Apache-Logs.

Sie müssen Ihre Authentifizierung so ändern, dass auth-erforderliche Antworten in den Apache-Protokollen offensichtlich sind. Andernfalls können Sie beim Anzeigen der Protokolle nicht authentifizierte Anfragen authentifizierten Benutzern zuordnen. Z.B. eine temporäre Weiterleitung an die Anmeldeseite zurückgeben, wenn die Anfrage nicht authentifiziert ist.

    
MattH 11.02.2010 12:17
quelle
1

Korrigieren Sie mich, wenn ich falsch liege, aber was Sie daran hindert, eine benutzerdefinierte Middleware zu erstellen, die ein Cookie gleich dem Anzeigenamen des aktuellen angemeldeten Benutzers setzt. Diese Middleware wird auf jeder Ansicht ausgeführt, also auch technisch der Benutzer könnte seinen Benutzernamen vortäuschen, um anzuzeigen, was immer er will, es wird nur zurückgesetzt werden, und es ist nicht wie es ein Sicherheitsrisiko, weil der Benutzername selbst nur für Protokollzwecke ist, überhaupt nicht auf den tatsächlichen Benutzer angemeldet ist scheint eine einfache Lösung zu sein, und dann kann Apache Log auf Cookies zugreifen, so dass Sie den einfachsten Zugriff haben. Ich weiß, dass manche Leute die Vorstellung nicht mögen würden, dass ein bestimmter Benutzer seinen eigenen Benutzernamen spoofiert, aber ich denke, das ist die trivialste Lösung, die den Job erledigt. Vor allem in meinem Fall, wenn es eine iPhone-App ist und der Benutzer keinen direkten Zugang zu einer JavaScript-Konsole oder den Cookies selbst hat.

    
ecbtln 02.05.2012 02:32
quelle