dWing — die Welt ist nicht gerecht

sign in

OpenID und node.js die zweite

Nachdem ich meine eigenen Experimente eine OpenID Bibliothek für node.js zu schreiben aufgegeben habe, bin ich vor einigen Tagen auf eine neue Bibliothek gestolpert. Ausprobiert und gleich einen Fehler beseitigt, wegen dem meine delegierte Adresse nicht funktioniert hat. Ich habe dann auch schnell angefangen weitere Verbesserungen zu machen, ich habe eine Simple Registration und eine Attribute Exchange Erweiterung geschrieben und mich für den gegebenen Anlass auch bei github angemeldet um meinen Fork zu veröffentlichen.

Bei der ganzen Arbeit bin ich über einen Fehler in der querystring Implementierung der node Standardbibliothek gestolpert. Die Verwendung von node 0.3 oder eines nicht-standard Moduls beseitigt das Problem dabei.

Ich habe nun heute versucht die inzwischen zufriedenstellend funktionsreiche OpenID Bibliothek in eine auf express.js basierende Seite einzubauen, als Anfang von einer Benutzerverwaltung. Leider ohne großen Erfolg. Da express selbst auch das querystring der Standardbibliothek verwendet bricht es bei einer OpenID Antwort ebenfalls zusammen. Ich hatte dann nochmal versucht node 0.3 anstatt 0.2 zu probieren, dies schlug aber auch fehl. Die Socketverbindung bricht aus unbegreiflichen Gründen ab, ähnlich diesem Fehlerbericht.

Alles in allem bin ich aber dennoch mit dem Fortschritt zufrieden. Unter bestimmten Voraussetzungen funktioniert OpenID einwandfrei, diese Voraussetzungen müssen jetzt nur noch im Zusammenspiel mit express erfüllt werden. Danach kann dann fleißig die tatsächliche Benutzerverwaltung mit automatischer Benutzerkontoerstellung und vielem mehr implementiert werden.

Eigentlich hatte ich auch noch vor etwas den PHP+MySQL mit dem node.js+MongoDB Stack zu vergleichen bei bestimmten Arten von Queries.

OpenID in node.js

Ich habe mich die letzten paar Stunden damit beschäftigt wie man denn OpenID in JavaScript über node.js implementieren könnte und ich bin recht früh an eine Mauer gestoßen als ich mir die Kryptographie von OpenID angeschaut habe. Dabei wird eine Byteweise XOR Verknüpfung mit einem generierten Schlüssel gemacht. Diffie-Hellman heißt das dann.

Dabei sind mir einige Dinge über JS aufgefallen die sowohl positiv als auch negativ sind. In JS sind Strings ausnahmslos Unicode. Es gibt gar keine nicht Unicode Strings. Sehr gut. Aber wenn ich byteweise etwas machen will dann ist es schlecht wenn mir charCodeAt() einen Unicodepunkt liefert und kein Byte. node.js’ Buffer schafft abhilfe, allerdings sehr kompliziert.

Als zweites fällt mir eher bei Ruby und Python auf, deren Code ich studiert habe, das die beiden Sprachen Zahlen mit beliebiger Präzision transparent unterstützen. Diese braucht man zur Schlüsselberechnung. In PHP wo ebenfalls Zahlen mit beliebiger Präzision fehlen wird ein externes Modul dafür benutzt. Dies pisst mich allerdings auch an. Ich will nicht für jede mathematische Operation eine Funktion aufrufen. In node gibt es wie ich bisher sehe noch keinen Wrapper für solch eine Bibliothek, also müsste ich den selbst schreiben. Gefällt mir nicht so sehr.

Was ist das Fazit dieses kleinen Experiments? JS ist eine Nette Sprache für Spielzeuganwendungen, aber wenn es ernster wird fehlen leider gewisse Sprachfunktionen die es in anderen Sprachen gibt.