dWing — die Welt ist nicht gerecht

sign in

Ist OpenID tot?

Durch meine Mitarbeit an der node-openid Bibliothek und der Gestaltung meiner neuen Webseite bin ich mal wieder intensiv in den Kontakt mit OpenID gekommen.

Nun bin ich über einen sehr guten Artikel gestolpert der die Frage stellt, ob OpenID nun tot ist. Ganz provokant wird OpenID als der erfolgreichste Fehlschlag des Webs bezeichnet.

Auch aus meiner Sicht ist sicherlich etwas falsch gelaufen. Die auch im Artikel angesprochene Asymmetrie ist überdeutlich: fast jeder Internetnutzer hat wahrscheinlich ohne es selbst zu wissen schon mehrere OpenIDs, dennoch gibt es extrem wenige Webseiten bei denen man sich mittels OpenID anmelden kann. Nur die wenigsten setzen ganz auf OpenID, so wie ich.

Der Grund warum ich es einsetze ist einfach: Ich habe weder Lust noch Fachwissen um hundertprozentige Sicherheit zu gewährleisten. Die billigsten Webseiten speichern einfach die Passwörter im Klartext in der Datenbank, andere benutzen dafür Hashwerte die je nach benutzter Hashfunktion und Salt auch relativ unsicher sind. Ein offizielles SSL Zertifikat kann sich keine Privatseite leisten, über ein selbst signiertes wie ich es benutze schreit der Browser standardmäßig. Dadurch ist das Passwort meist unverschlüsselt im Netzwerk unterwegs. Für die Persistenz kann man auch noch mehr oder weniger unsichere Cookies verwenden.

Alles in allem: Echte Sicherheit zu gewährleisten ist schwer und mit OpenID kann ich all dies an den OpenID Provider delegieren. Das Benutzerpasswort kriege ich nie mit, das einzige was meinen Benutzer identifiziert ist seine OpenID, und die ist sowieso öffentlich. Diese wird auch für Persistenz benutzt und im Cookie gespeichert. Auch hier kann das Cookie gern über XSS oder sonstige Methoden gestohlen werden, es sind ja keine sensitiven Informationen darin enthalten.


Zurück zum Thema: Es gibt zu wenige Seiten bei denen man sich mittels OpenID anmelden kann. Zudem ist das Protokoll auch übermäßig komplex wie ich bei meiner Arbeit an der Bibliothek feststellen musste.

Der Artikel geht aber noch auf ein anderes Problem mit OpenID ein: Der Standard ist für die Authentifizierung gedacht, das heißt sicherzustellen, das dem Benutzer die eingegebene OpenID (z.b. swatinem.de) wirklich gehört.

Über Erweiterungen wie Simple Registration (Sreg) oder Attribute Exchange (AX) kann die Webseite weitere Daten wie beispielsweise E-Mail Adresse und Name anfordern. Diese Erweiterungen sind optional und es ist nicht sichergestellt, das der OpenID Provider diese Informationen auch liefert, also muss man so oder so eine Registrierungsmaske bereitstellen.

Nebenbei Erwähnt: Sreg definierte nur wenige Attribute und wurde daher durch AX ersetzt. AX stattdessen setzt auf absolut flexible an RDF angelehnte URIs als Attribut Schlüssel und somit nicht einheitlich, zu unübersichtlich und zu kompliziert.


Ich als technisch versierter Nutzer kann einerseits nicht nachvollziehen warum so viele Webseiten unnötig viele Nutzerdaten haben wollen, andererseits will ich absolute Kontrolle darüber haben welche Webseite welche Daten von mir hat. OpenID bietet mir genau das.

Als Alternative ist die Anmeldung über Facebook sehr beliebt, nicht allerdings bei mir. Möglicherweise ist das zugrundeliegende OAuth ein einfacheres und besser Protokoll als OpenID, allerdings nerven mich zwei Sachen: erstens das die Webseite von Facebook anscheinend beliebig viele Daten erhalten und ausnutzen kann. Andererseits, weshalb ich die Anmeldung über Facebook nicht implementieren werde: Für die Anmeldung über Facebook ist es erforderlich das die Webseite bei Facebook eingetragen ist, und dazu benötigt man ein Facebook Konto. Dieser Netzwerkeffekt und Anmeldezwang ist es was ich an Facebook am meisten verabscheue und gegen was ich auch weiterhin ankämpfen werde.

Ich will einfach ein dezentrales System wie E-Mail, Jabber, OpenID und möglicherweise Diaspora bei dem jeder miteinander agieren kann egal welchen Dienstanbieter er benutzt. Was wäre bitte E-Mail wenn ich mit meiner Googlemail Adresse nur an Googlemail senden könnte und nicht an GMX oder Hotmail? Dieser Zwang zu einem Dienstanbieter und dadurch dessen Monopolisierung ist meiner Meinung nach eine der größten Gefahren für die Freiheit im Web und muss daher dringend entgegengewirkt werden.

Namen ändern

Nun habe ich endlich eine lange überfällige Funktion in dWing eingebaut. Es ist nun möglich seinen Namen zu ändern. Vor allem für die ganzen Google und Yahoo Nutzer ist dies sehr gut, denn diese Dienste unterstützen nicht den Austausch von Nutzerdaten wie Name bei der Anmeldung.

Diesbezüglich habe ich auch probiert von der veralteten OpenID Simple Registration Erweiterung auf Attribute Exchange umzusteigen, nur um festzustellen, das keiner der Provider, nicht einmal MyOpenID diese Erweiterung unterstützen. Oder aber ich habe etwas falsch gemacht, kann natürlich auch sein.

Für OpenID habe ich auch ein sehr interessantes Widget gefunden, das es sicherlich wert ist ausprobiert zu werden.


Als ich also gestern mal wieder an dWing gearbeitet habe ist mir aufgefallen wie unbequem es doch ist damit zu arbeiten, und das es vielleicht viel besser wäre wieder einmal von null anzufangen. Möglicherweise sogar mit einem ganz anderen Technologiestapel als den altbekannten PHP und MySQL.

Ich habe also intensiv in die Richtung serverseitiges Javascript und NoSQL Datenbanken recherchiert. Node.JS und ExpressJS scheinen sehr interessante Lösungen zu sein. Zusammen mit einer Template Sprache wie Embedded JS, die ich in einer abgespeckten Version schon ein paar mal eingesetzt habe bietet dies sicher eine gute Kombination. Mit serverseitigen JS und Templates die am Server und am Client gleich sind kann man sicherlich schneller zu einem konsistenteren Ergebnis kommen.

Node basiert auf der V8 Engine aus Chrome, ich weiß also nicht genau wie viele der erweiterten Funktionen von Spidermonkey wie beispielsweise Array Comprehension oder Generators es unterstützt. Als Mozilla Entwickler würde es mich auch sehr interessieren, wie sich Jägermonkey in so einem Einsatzgebiet schlagen würde. Bisher ist allerdings ExpressJS sehr schnell. Mit keepalive Anfragen ergibt es über 5000 Anfragen die Sekunde für ein Hallo Welt Skript. PHP kommt auf vielleicht 2000. Hinter einem Lighttpd Proxy ohne keepalive kommt es immerhin noch auf etwas über 2000, also in etwa PHP Niveau. Ich denke aber, dass sich mit der Performance mehr ausgeht, denn die JS Engines haben bessere JIT Compiler und deren Performance wird auch ständig weiter verfeinert.

Wenn man eine andere Syntax mag kann man auch CoffeeScript benutzen. Dies ist eine etwas einfachere Syntax, die zu JS compiliert wird und ebenfalls Funktionen wie Array Comprehension unterstützt.

Als Datenbanklösung könnte sich MongoDB anbieten. Eine Dokumenten- und JSON-basierte Datenbanklösung wäre sicherlich sehr interessant auszuprobieren. Allerdings schweben mir einige Dinge vor von denen ich keine Ahnung habe wie diese damit zu lösen wären.

Für die Arbeit mit CSS finde ich Sass sehr interessant, macht die Arbeit in manchen Situationen sicherlich einfacher. Haml ist auch eine interessante Möglichkeit für Templates, allerdings gefällt mir die Syntax nicht ganz so sehr, und meine sehr alten Erfahrungen mit Smarty haben bewiesen, das es doch sehr viel sinnvoller ist eine echte Programmiersprache in den Templates zu haben.


Alles in allem sehr interessante Projekte die ich gerne mal ausprobieren würde, möglicherweise zuerst in TinderboxPushlog bevor ich mich daran wage aus meinem PHP dWing ein JS dWing zu machen.

OpenID mit Google Konto

Ich habe neulich die OpenID Anmeldung bei dWing etwas aktualisiert. Nun gibt es zwei Schaltflächen mit denen man sich direkt mit einem Google oder Yahoo Konto anmelden kann. Funktioniert auch super, also kann sich jetzt jeder mit seinem Google Konto anmelden der keine anderweitige OpenID hat.

Was mir allerdings an dem Googleschen OpenID nicht sehr gefällt ist die ID, denn diese ist scheinbar ein Hash-Wert. Eigentlich sollten OpenID Adressen ja merkbar sein. Auch musste ich sehr lange nach der Login URL suchen. Wie sollte dann jemand an seine Google OpenID kommen der sich nicht so gut mit der Technik auskennt als ich. Da hat Yahoo die Arbeit besser gemacht. Dort gibt man einfach yahoo.com als OpenID an und im Hintergrund bekommt man dann seine echte ID eingetragen, allerdings weiß ich grad nicht ob diese denn auch so gut lesbar ist.

Fazit: Funktionieren tut es super, allerdings scheint Google kein Interesse daran zu haben den Benutzern OpenID nahe zu bringen.

Zum kotzen mal wieder

Seit einiger Zeit ist ja die offizielle OpenID Library für PHP in der neuen Version 2 erschienen. Und natürlich hat es gleich gar nicht funktioniert auf dWing. Die Library verträgt sich nicht mit Rewrites. Schade eigentlich, denn rewrites sind sehr sehr praktisch.
Nachdem ich den Fehler beseitigt habe indem ich einfach bei der speziellen Situation auf den Rewrite verzichtet habe, habe ich ein wenig herumexperimentiert.
Im Klartext: Ich habe mir eine PHP6 nightly heruntergeladen und installiert. Mein dWing hatte einige minimale Probleme, aber danach war sowieso klar das die OpenID lib versagt. Ich versteh einfach nicht warum diese Lib auf PHP4 aufbauen muss. Das ist mal wieder diese Henne-Ei-Problem. Hoster installieren kein PHP5 auf ihren Servern weil es einige Software gibt die unter PHP5 versagt, wie diese lib. Aber die Software wird nicht fit für PHP5 gemacht, weil es noch Server gibt die kein PHP5 unterstützen. Grauenvoll.
So sehr schlecht ist die lib bei PHP5 nun auch wieder nicht. Solange ich Fehler unterdrücke funktioniert es. In PHP6 allerdings nicht mehr. Ich habe es durch relativ wenige Änderungen hinbekommen das die lib nicht in einem fatal error endet. Aber wegen irgendwelchen Gründen funktionierte sie nicht mehr. Aber um 1 Uhr in der Nacht hatte ich auch keine Lust mehr dem Problem weiter auf den Grund zu gehen.
Heute habe ich mir allerdings gedacht dass vielleicht der TestSuite von der library weiterhelfen könnte das Problem zu finden. Aber da wurde ich wieder enttäuscht. Die library verwendet PHPUnit 2 für den TestSuite. Natürlich habe ich es nicht installiert, sonder nur PHPUnit 3. Warum sollte auch eine lib die extra PHP4 kompatibel gehalten wurde für die Tests PHP5 voraussetzen. Aber verdammt nochmal: PHPUnit2 ist tot! Genauso tot wie es PHP4 verdammt nochmal ist!!!
Ich hatte kurzzeitig die Schnauze voll und habe mich nach einer alternative umgesehen: eine auf PHP5 basierte OpenID lib war schnell gefunden. Alphastatus, nur aus dem Subversion beziehbar. Aber wenigstens besser als eine total obsolete PHP4 lib.
Dachte ich zumindest. Denn diese PHP5 lib basiert auf PEAR. Ich habe PEAR schon immer gehasst und ich hasse es jetzt noch umso mehr. Tausende Pakete muss man dazuinstallieren damit wenigstens keine include Fehler ausgespuckt werden. Und dann ist man immer noch weit davon entfernt das die software so funktioniert wie sie es soll...

Und warum verdammt muss ich selbst im TestSuite von PHPUnit 3 einige include Befehle auskommentieren, weil diese Dateien im Paket einfach nicht enthalten sind? Und in diesem Fall halte ich es für unwahrscheinlich das es an der Abhängigkeit zu einer anderen Library gescheitert ist.

Also was soll ich jetzt machen? Am besten wäre es ja die offizielle OpenID library auf PHP5 bzw gleich PHP6 zu portieren, dann hätte jeder was davon. Um das richtig zu machen muss ich sowieso die Tests auf PHPUnit 3 umbauen. Sowieso braucht PHPUnit 3 erstmal ein HTML GUI, um es benutzbar zu machen. Und wenn ich schon dabei bin die ganze OpenID lib umzuschreiben kann ich auch gleich das SQLStore auf PDO umbauen, denn aktuell basiert es auf nichts anderem als PEAR.
So eine scheiße aber auch! Da zuck ich gleich voll aus!

neue OpenID Anmeldungsseite

Ich war heute mal wieder aktiv. Zuerst habe ich für mich selbst das Formular für neue Blog Einträge neu gestaltet und im zweiten Schritt die Anmeldeseite. Es wird jetzt kurz erklärt was OpenID ist und auch ein Link zu MyOpenID als einen Provider bereitgestellt.
Außerdem gibt es etwas Verwirrung bei den Wörtern Login/Anmeldung usw. Ich habe mich nun dazu entschieden von den Anglizismen wie z.b. Login/Logout abschied zu nehmen und möglichst gute Deutsche Begriffe dafür zu verwenden.
Hier mal ein kleiner Leitfaden:
Ich hoffe mal das euch die neue Seite gefällt und ich wünsche euch viel Spaß mit OpenID und auch viel Spaß beim Beiträge bewerten und kommentieren auf dWing. Wenn ihr nicht angemeldet seid, dann habt ihr anstelle des Kommentar Formulars einen Link zur Anmeldeseite.
Uargh irgendwie kommt es mir auch etwas komisch vor statt Login, Anmeldung zu sagen.

older posts