Apache mod_auth_tkt und Python AuthTkt

Informationsfrische

Hintergrund

Über verwandte Dokumente

Zunächst ist es ein Dokumentenfischen, um einen Überblick über die von mod_auth_tkt bereitgestellte "Ticketauthentifizierung" zu erhalten. Zu beiden Modulen gibt es jedoch nicht viel Dokumentation.

Die im Cookie enthaltenen Informationen sind jedoch einfach, sodass es nicht allzu schwierig zu sein schien.

Es ist die Hauptinformationsquelle ...

In diesem Artikel werde ich nur eine Übersicht schreiben.

mod_auth_tkt / AuthTkt ist gut!

Der Ticketaussteller (diesmal die Django-Site) und der Ticket-Konsument (diesmal ein bestimmtes Verzeichnis in Apache) Teilen Sie Folgendes:

Während der Freigabe dieser beiden, der Ticketaussteller

Speichern Sie das Ticket als Cookie basierend auf. Sie werden nebeneinander aufgelistet, aber um es richtig zu erklären, sind das "Common Secret" und der "Hash-Algorithmus" erforderlich, wenn Sie ein Ticket erstellen. Andererseits sind "Benutzername" und "IP-Adresse" die im Ticket (Cookie) enthaltenen Informationen.

Apache verwendet den Namen des Cookies und ein gemeinsames Geheimnis, um das Ticket und zu überprüfen

Bestätigen Sie beispielsweise und führen Sie die Authentifizierung / Autorisierung durch.

Sie können auf beiden Seiten mehrere Token angeben (dies ist nicht erforderlich). Wenn der Verbraucher des "admin" -Tokens erwartet Der Aussteller muss das "admin" -Token in das Ticket eingebettet haben. Ich denke, wir können eine gewisse Zugangskontrolle erreichen. (Da ich jedoch nur ein gemeinsames Geheimnis haben kann, fühlt es sich so an, als wäre etwas verrückt, selbst wenn ich damit eine Gatchigachi-ACL mache.)

Es scheint, dass Sie den Gültigkeitsbereich und das Ablaufdatum des Tickets detailliert angeben können. Es ist nicht der Umfang dieses Artikels.

Vorbereitung der Umwelt

# apt-get install mod_auth_tkt
# pip install -U AuthTkt

Beispiel für eine Apache-Seiteneinstellung

Es gibt also einige Beispiele auf der Manpage von mod_auth_tkt Ich denke, es ist besser, es zu sehen ...

TKTAuthSecret "Ukaga"

<Directory /opt/griflet/data/result/>
    AuthType None
    TKTAuthLoginURL http://example.com/django/issue_ticket
    TKTAuthDomain example.com
    TKTAuthDebug 3
</Directory>

Für Debian gibt es in /etc/apache2/mods-enabled/auth_tkt.conf einen Abschnitt, in dem ein TKTAuthSecret geschrieben werden soll.

Wenn TKTAuthDebug angehängt ist, wird in error.log ein Fehler angezeigt. Alle Erklärungen werden auf der Manpage angezeigt.

Beispiel für die Implementierung auf der Django-Seite

Insbesondere besteht eine hohe Wahrscheinlichkeit, dass die Cookie-Einstellungen vorerst eher schlampig sind. (urls.py oder alles andere weggelassen)

@login_required
def issue_ticket(request):
    user = request.user
    # http://stackoverflow.com/questions/4581789/how-do-i-get-user-ip-address-in-django
    ip = utils.get_client_ip(request)
    token = authtkt.AuthTicket(TKT_AUTH_SECRET,
                               user.username,
                               ip,
                               tokens=['user'])
    # TODO:Lassen Sie uns umleiten
    response = render(request, '{}/hello.html'.format(NAMESPACE), {})
    response.set_cookie('auth_tkt', token.cookie_value(),
                        domain=TKT_AUTH_DOMAIN)
    return response

Obwohl es in TODO geschrieben ist, werden Sie beim Zugriff auf "TKTAuthLoginURL" ohne Ticket auf diese Seite weitergeleitet, wobei die Rückgabe-URL "back" in der Abfrage festgelegt ist. Lassen Sie uns für den Benutzer umleiten

Referenz

Es gibt viele verwirrende Module, insbesondere auf der Seite der Python-Implementierung

Bitte entscheiden Sie, welches besser ist. Wenn sich die Spezifikationen auf der Verbraucherseite (Apache) jedoch nicht geändert haben, sollte es praktisch keinen Unterschied geben, was zu tun ist.

Herausforderungen, die ich fühlte

Es scheint, dass es viele Leute gibt, die denken, dass der kleine Maßstab, über den wir diesmal nachdenken, in Ordnung ist, aber dass es ein großer Maßstab ist.

Zusammenfassung

Es wird einfacher sein herauszufinden, ob Sie sich daran erinnern, dass Sie das auch können.

Nachtrag (10.01.2014)

Aufgrund etwas mehr Nachforschungen berichte ich auch, dass dies nicht meinem Zweck entsprach.

Angenommen, Sie erstellen eine Django-Website, auf der mehrere Projekte dynamisch erstellt und ausgeblendet werden (z. B. Projektmanagement). Zu diesem Zeitpunkt möchte ich für jedes Projekt verschiedene Arten von Tickets ausstellen und die herunterladbaren Dateien entsprechend der Art des Tickets ändern.

Dies kann nicht allein mit Apaches mod_auth_tkt durchgeführt werden.

Insbesondere erlaubt die aktuelle Implementierung von mod_auth_tkt in keiner Weise Variablen in TKTAuthToken. Selbst wenn Sie die Apache-Umgebungsvariable mit SetEnvIf festlegen, können Sie sie anscheinend zumindest in der verifizierten Version nicht abrufen. Ich habe mir den Quellcode angesehen, aber es gibt wieder keine Logik, um damit umzugehen.

Ich habe von X-SendFile gehört, also werde ich es versuchen.

Recommended Posts

Apache mod_auth_tkt und Python AuthTkt
CentOS 6.4, Python 2.7.3, Apache, mod_wsgi, Django
[Python] Komprimieren und dekomprimieren
Python Iterator und Generator
Python-Pakete und -Module
Vue-Cli- und Python-Integration
Ruby, Python und Map
Integrieren Sie Apache und Tomcat
Python-Eingabe und Ausgabe
Python und Ruby teilen sich
Python asyncio und ContextVar
Untersuchen Sie den Java- und Python-Datenaustausch mit Apache Arrow
Ver- und Entschlüsselung mit Python
Word Count mit Apache Spark und Python (Mac OS X)
3-3, Python-Zeichenfolge und Zeichencode
Python 2-Serie und 3-Serie (Anaconda Edition)
Python und Hardware-Verwenden von RS232C mit Python-
Python auf Ruby und wütend Ruby auf Python
Python-Einzug und String-Format
Python Real Number Division (/) und Integer Division (//)
Å (Ongustorome) und NFC @ Python
Python3 + Django ~ Mac ~ mit Apache
Lernen Sie Python-Pakete und -Module kennen
# 2 [python3] Trennung und Kommentar aus
Flache Python-Kopie und tiefe Kopie
Python und Ruby Slice Memo
Python-Installation und grundlegende Grammatik
Ich habe Java und Python verglichen!
Flache Python-Kopie und tiefe Kopie
Herausforderungen und Chancen von Apache Flink
Über Python, len () und randint ()
Informationen zu Python-Datums- und Zeitzone
Apache auf Macports, Python 3.3 + mod_wsgi3.4 auf Nicht-Macports
Installieren Sie Python 3.7 und Django 3.0 (CentOS)
Python-Umgebungskonstruktion und TensorFlow
Python-Klassen- und Instanzvariablen
Ruby- und Python-Syntax ~ branch ~
[Python] Python und Sicherheit - is Was ist Python?
Stapel und Warteschlange in Python
Python-Metaklasse und SQLalchemie deklarativ
Implementierung von Fibonacci und Primzahlen (Python)
Python-Grundlagen: Bedingungen und Iterationen
Python-Bitoperator und logische Summe
Python-Debug- und Testmodul
Python-Liste und Tapples und Kommas
Python-Variablen und Objekt-IDs
Berühren Sie Apache Beam mit Python
Python-Listeneinschlussnotation und Generator
Über Python und reguläre Ausdrücke
Python mit Pyenv und Venv
Unittest und CI in Python
Maxout Beschreibung und Implementierung (Python)
[Python] Quotient und Überschuss erhalten
Python 3 Sortier- und Vergleichsfunktionen
[Python] Suche nach Tiefenpriorität und Suche nach Breitenpriorität
Identität und Äquivalenz: ist und == in Python
Quellinstallation und Installation von Python
Python oder und und Operatorfalle
Fordern Sie Python3 und Selenium Webdriver heraus