User aus NTLM-Authentifikation

Django, Flask, Bottle, WSGI, CGI…
Antworten
tsd1sw
User
Beiträge: 8
Registriert: Mittwoch 22. Juli 2020, 09:42

Hallo,

ich lasse aktuell Flask unter Python 3.8 auf einem virtuellen Server (Windows Server 2016) in unserem Firmennetzwerk laufen.
Dazu habe ich einen Windows-Service eingerichtet der meine app.py ausführt. Ich habe also keinen unterlagerten Apacheserver oder ähnliches.

Damit ich nun meine Zugriffe steuern kann, möchte ich gerne das Active Directory (ntlm) unserer Firma nutzen.
Ich weis, dass ntlm nicht die sicherste Variante ist. Da es sich um eine reine Intranet-Seite handelt, ist das kein Problem.
Wenn ich aber sämtliche request oder os Variablen auswerte, bekomme ich nur den Server und den User meines VM-Servers angezeigt, der Flask aktuell ausführt.

Wie komme ich am geschicktesten an die Domain bzw. Usernamen des Clients ran?

Danke schon im Voraus für die Unterstützung
Sirius3
User
Beiträge: 18255
Registriert: Sonntag 21. Oktober 2012, 17:20

Du mußt dem Client eine Authorization-Anfrage schicken, und der Antwortet dann mit einer ntlm-Antwort. Dort steht natürlich auch der Nutzername drin.
tsd1sw
User
Beiträge: 8
Registriert: Mittwoch 22. Juli 2020, 09:42

Kannst du mir ein kurzes Code-Beispiel geben?
Bin gerade überfragt wie ich das mache.
Sirius3
User
Beiträge: 18255
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie authentifizierst Du denn sonst den Nutzer?
tsd1sw
User
Beiträge: 8
Registriert: Mittwoch 22. Juli 2020, 09:42

Aktuell authenfiziere ich mich gar nicht.
Bisher ist die Webseite offen für alle.

Möchte das ganze nun mit einem Berechtigungskonzept hinterlegen, so dass nur bestimmte User nur bestimmte Rechte haben
Sirius3
User
Beiträge: 18255
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Anzahl der Leute, die ntlm-Authentifizierung machen wollen ist nicht sehr gross, da scheint es ein Projekt zu geben: https://pypi.org/project/Flask-SSPI
Heutzutage benutzt man eigentlich Kerberos, da ntlm nicht wirklich sicher ist.
tsd1sw
User
Beiträge: 8
Registriert: Mittwoch 22. Juli 2020, 09:42

Hallo,

vielen Dank für den Tipp.
Ich habe es mit Flask-SSPI zum laufen bekommen.

Für diejenigen, die auf der Suche nach so etwas waren, habe ich hier einen Beispielcode angehängt.
(Der Secret-Key muss natürlich angepasst werden.)

Code: Alles auswählen

from flask_sspi import requires_authentication
from flask import Flask

app = Flask(__name__)
app.secret_key = ???


@app.route("/")
@requires_authentication
def protected_view(user):
    return user


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=1337, debug=True)
Antworten