Request: Identität des Senders ermitteln

Django, Flask, Bottle, WSGI, CGI…
Antworten
BulliM
User
Beiträge: 11
Registriert: Mittwoch 16. März 2022, 12:11

Hallo,

ich programmiere gerade eine Anwendung mit Python und möchte von der Anwendung aus, Daten an einen Server senden. Dazu möchte ich aber wissen, welcher Benutzer diese Daten gesandt hat. Bei einem Formular auf der Webseite kein Problem, da erkennt der Server den Sender über das Cookie im Webbrowser. Hier aber verwende ich eine Standalone-Anwendung, die auf dem Rechner des Senders bzw. Clients ausgeführt wird. Daher bekomme ich die Identität nicht über die Session im Browser. Oder kann ich die Daten z.B. als File über ein Formular im Browser an den Server senden? Oder kann ich eine Anwendung mit einem Fingerprint ausstatten?

Wie löst man das, ohne, dass es zu einem Sicherheitsbruch kommt?
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ein Browser ist auch nur eine Anwendung. Ergo: Anwendungen können Daten an den Server schicken, die den Client auch eindeutig identifizieren.

Wenn du sowas willst, musst du eben so wie ein Browser eine Authentifizierung durchführen. Also zb username/password Abfragen & einen Cookie bekommen. Oder einen der diversen Social Logins/openIDs benutzen.
BulliM
User
Beiträge: 11
Registriert: Mittwoch 16. März 2022, 12:11

Nun ist aber der Client bereits auf meiner Webseite eingeloggt. Das wäre sozusagen die Voraussetzung für das Senden bzw. Annehmen von Daten.

Bisher wird für die Übertragung ein Formular auf der Webseite verwendet. Das muss der Client bisher selbst bedienen. Also Klicken, File auswählen und den Sendebutton betätigen. Da stellt der Server die Identität über das Cookie fest. In einer Standalone-Anwendung aber, geht das ohne Einbettung im Browser nicht. Da ist die Anwendung das Formular, wenn man so will.

Ich suche eine Lösung, wie Python die Daten über die geöffnete Webseite sendet, oder eine sichere Alternative ohne Extralogin, bei der die Identität festzustellen ist.
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Technisch ändert sich da wenig. Du brauchst einen Cookie. Ein Weg den zu bekommen ist ein Anwedungsspezifisches Protokoll. Wir benutzen das auch, um unsere Anwendung mit dem Account des Benutzers zu verbinden. Eine Alternative besteht in einem simplen round trip zwischen Anwendung, Server und Webbrowser. Die Anwendung erzeugt ein Secret. Dann ruft sie mit dem Modul webbrowser denselben auf, mit einer URL auf deinen Webserver, die dieses Secret enthält. Dann kann der Benutzer auf der Webseite abnicken, dass er diese Verbindung gutheißt. Und der Server erzeugt dann ein Ticket, das sich die Anwendung unter Angabe ihres eigenen secrets abholen kann.

Das ist aber am Ende nix anderes, als Oauth, und wahrscheinlich schwer sicher zu implementieren. Besser ist es, den OAuth Standard (bzw OAuth 2) einfach dafür zu benutzen. Der Steck auch hinter den ganzen Social Logins.
BulliM
User
Beiträge: 11
Registriert: Mittwoch 16. März 2022, 12:11

__deets__ hat geschrieben: Mittwoch 16. März 2022, 13:11 Das ist aber am Ende nix anderes, als Oauth, und wahrscheinlich schwer sicher zu implementieren. Besser ist es, den OAuth Standard (bzw OAuth 2) einfach dafür zu benutzen. Der Steck auch hinter den ganzen Social Logins.
Danke für die Antwort. OAuth habe ich in PHP schon programmiert. Die Technik ist mir zumindest vom Ablauf bekannt. Ich werde das mal durchdenken. Bis dahin werde ich wohl weiter auf das Formular und händischen Upload setzen müssen.
Antworten