[python-users] twisted xmlrpc/jsonrpc authentifizierung und Session-Verwaltung

Muharem Hrnjadovic muharem at hrnjad.net
Sa Dez 19 08:33:32 CET 2009


Hallo Thomas,

Vielleicht hilft Dir ja dieser Artikel weiter:
http://jcalderone.livejournal.com/tag/sixty+seconds#post-jcalderone-53074

Ich finde die ganze "60 seconds" Reihe lesenswert:
http://jcalderone.livejournal.com/tag/sixty+seconds

Mit freundlichen Grüßen

-- 
Muharem Hrnjadovic <muharem at hrnjad.net>
Public key id   : B2BBFCFC
Key fingerprint : A5A3 CC67 2B87 D641 103F  5602 219F 6B60 B2BB FCFC


Thomas Renard wrote:
> Hallo zusammen,
> 
> irgendwie verzweifle ich völlig bei dem
> Twisted-AUthentifizierungs-Mechanismus. Entweder ich entwickle gerade
> etwas, was es nicht geben darf, Twisted ist völlig ungeeignet dazu
> (?), oder ich bin nicht mehr in der Lage, mit der neuen Google-Engine
> irgendeine vernünftige Antwort aus dem Netz zu ziehen...
> 
> Egal, ich beschreibe einfach mal, was ich vorhabe, vielleicht hat ja
> irgendwer ne Idee dazu:
> 
> Ich baue eine eine Webanwendung, die von der Client-Seite aus über
> jsonrpc auf einen Twisted-Server zugreift. Je nach (un-)angemeldetem
> User möchte ich, daß der Twisted-Server unterschiedliche JSONRPC-Klassen
> anzieht und der Webanwendung somit einen unterschiedlichen
> Funktions/Methodensatz zur Verfügung stellt:
> 
> class AnonymousResource(jsonrpc.JSONRPC):
>     """Methods for anonymous users"""
> 
>     def __init__(self):
> 	pass
> 
>     def jsonrpc_login(self, username, password):
>         """Hier soll das Login-Geraffel ablaufen. Für einen
> unangemeldeten Anwender die einzige Funktion"""
> 
> class UserResource(jsonrpc.JSONRPC):
>     """Hier tauchen alle methoden auf, die ein User aufrufen darf"""
> 
>     ...
> 
>     def logout(self):
>         """klar, abmelden muß man sich auch mal"""
> 
> class AdminResource(UserResource):
>     """und hier alle zusätzlichen methoden für den Admin, die
>        der User nicht machen darf"""
>     def __init__(self):
> 	UserResource.__init__(self)
> 
> Der obige Aufbau ist etwas starr, ermöglicht aber hoffentlich bei
> zukünftigen Erweiterungen so gut wie möglich weitere Module.
> 
> So, wie ich das verstanden habe, sollte Twisted mit cred irgendwie in
> der Lage sein, je nach Zustand einer Session eine dieser drei Resourcen
> zur Verfügung zu stellen.
> 
> Die Beispiele, die ich überhaupt gefunden habe, verwenden
> HTTPAuthWrapper, verlangen also eine User/Pass-Abfrage per HTTP Header.
> 
> Was ich hier aber habe, soll auf der Client-Seite eine Form haben, die
> beim Drücken auf den Feuerknopf einen jsonrpc-Aufruf machen soll und
> daraufhin z. B. vom Server einen Cookie gesetzt bekommt mit der Session
> ID (besser noch: er liefert die ID zurück, und bei weiteren AUfrufen
> wird die ID wieder im Funktionsaufruf mitgegeben, ggf. ist nämlich mein
> JS-Konstrukt zu blöde, Cookies zu verarbeiten oder mit dem
> XMLHTTPRequest abzuschicken).
> 
> Die Infrastruktur für die Session-Verwaltung ist da
> (SQLAlchemy-Datenbank mit einem Session-Element, einem User-Element, in
> dem auch definiert ist, ob der Anwender User oder Admin ist - eigentlich
> ein Integer, 1->User, 10->Admin).
> 
> Außerdem: ein normaler jsonrpc-unauthentifizierter Handshake
> Server<->Client funktioniert bereits ;-)
> 
> Jetzt die Frage: Wie bekommt man das in eine funktionierende
> cred-Struktur? Ich benötige einen Realm, der eine der drei oberen
> Classes liefert, aber die Portal/Cred-Geschichte ist mir ein völliges
> Rätsel.
> 
> Noch ne dumme Frage: Wenn es da ne Lösung für gibt, wie verhält sich da
> ein Caching (immerhin ist bei jedem Aufruf die Session samt User aus der
> Datenbank zu holen, das wäre ja praktisch, wenn der Twisted-Server das
> im Cache halten könnte).
> 
> Im Augenblick arbeite ich mit twisted.web und txjsonrpc. Ich möchte den
> Library-Wust möglichst gering halten, damit das, was rauskommt auch noch
> bei möglichst vielen läuft. Also möchte ich Nevow oder ähnliches meiden.
> Pure twisted sozusagen. Wenn wer ein Beispiel hat, was mit xmlrpc
> funktioniert, bin ich auch glücklich (txjsonrpc ist nahezu vom xmlrpc
> geklont). Unittests mit Twisted und Nose scheine ich auch schon im Griff
> zu haben - mal schauen, wie das mit nem Portal aussieht...
> 
> Wenns denn mal funktioniert, habe ich vielleicht was für nen Vortrag
> (Fettere Javascript-Client-Applikationen in Python gecoded: pyjamas -
> http://pyjs.org - das ist nämlich der coole Aspekt bei meiner Anwendung).
> 
> Jeder Hinweis macht mich glücklicher ;-)
> 
> erstmal danke für alle Bemühungen
> 
> Thomas
________________________________________
Diese Mail erhalten Sie ueber die Mailingliste Python-users der
Universitaet zu Koeln
Python-users at uni-koeln.de
https://lists.uni-koeln.de/mailman/listinfo/python-users



-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 899 bytes
Beschreibung: nicht verfügbar
URL         : <http://lists.uni-koeln.de/pipermail/python-users/attachments/20091219/34549afa/attachment.sig>
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 898 bytes
Beschreibung: OpenPGP digital signature
URL         : <http://lists.uni-koeln.de/pipermail/python-users/attachments/20091219/34549afa/attachment-0001.sig>


Mehr Informationen über die Mailingliste python-users