OpenID1 ist ein dezentrales Single SignOn Verfahren das helfen will, die Legion der User/Passwort-Kombinationen zu reduzieren.
Die Idee ist, dass man sich einmal eine OpenID besorgt und sich dann mit dieser bei vielen Sites anmelden kann. Dazu wird meistens ein OpenID-Feld angezeigt in dem man dann die Adresse seiner OpenID einträgt. Die Login-Seite leitet dann zu der OpenID weiter. Sollte man sich im Verlauf der aktuellen Surf-Session noch nicht mit seiner OpenID angemeldet haben macht man das nun, wird wieder zurück auf die Seite geleitet an der man sich anmelden wollte und ist drin. Das ganze sieht dann z. B. so wie bei identi.ca2 aus:
Das ist sehr einfach und hört sich nur anfangs kompliziert an.
Das ganze hat aber auch Haken:
- Bei weitem nicht alle Websites des Internet unterstützen OpenID3
- Manche Websites geben zwar OpenIDs aus, nehmen aber keine fremden an, so dass der ganze dezentrale Gedanke den Sinn verliert
- Man vertraut seine Login-Daten für eine ganze Menge Sites seinem OpenID-Provider an
Das letzte Problem lässt sich schnell lösen, wenn man einfach sein eigener OpenID-Provider wird.
Dazu braucht man im Prinzip nur ein bisschen eigenen Webspace der PHP kann und das Script PHPMyID. Da ich Wordpress für meine Seite benutze, habe ich ausserdem noch das OpenID Delegate PlugIn heruntergeladen, das es sehr einfach macht OpenID-Anfragen an die richtige Stelle zu lenken.
Weiter nach dem Klick… Und schon gehts los:
Ich habe auf meinem Webspace einen neuen Ordner namens id erstellt und die beiden4 Dateien aus denen PHPMyID besteht in diesen Ordner hoch geladen.
Die Datei MyID.config.php habe ich in index.php umbenannt, die Datei MyID.php habe ich gelassen wie sie ist.
Jetzt kann man schon mal die Erreichbarkeit testen. Wenn man seine OpenID aufruft5 sollte man als Meldung “This is an OpenID Server endpoint.” zurück bekommen. Ausserdem sollte die Meldung eine “Server”-URL und eine “Realm” enthalten. Diese sollte in den meisten Fällen “phpMID” lauten. Wenn zum Beispiel eine Zahl an diesem String dran hängt, läuft PHP im Safe Mode. Das ist nicht schlimm, dann muss man sich den Realm-Wert nur merken.
In der index.php Datei werden nun der eigentlich User und das Passwort eingetragen. Damit das Passwort nicht im Klartext im Internet steht wird es vorher lokal md5-verschlüsselt.
Das geht unter unixoiden Systemen so:
$ echo -n 'username:realm:password' | openssl md5
Windows-User können sich hier eine md5.exe herunterladen und dann z.B. so ein verschlüsseltes OpenID-Passwort herstellen:
C:\Dokumente und Einstellungen\user\Desktop>md5.exe -d"username:realm:password"
Username, Passwort und die Realm muss man natürlich durch die eigenen Werte ersetzen. Das so entstandene Passwort und den Usernamen fügt man nun in die index.php ein, das sollte dann ungefähr so ausschauen:
'auth_username' => 'username',
'auth_password' => 'ce7ay7i939a4aae768359ac0547wc5be',
Jetzt kann man sich unter dem schon vorhin getesteten OpenID-Endpoint anmelden indem man auf “Login” klickt.
An dieser Stelle wurde bei mir leider ein Fehler ausgegeben: Missing expected authorization header.
Das bedeutet, dass PHP im CGI-Modus läuft und daher die http request header nicht von phpMyID lesbar sind. Glücklicherweise liefert phpMyID aber eine Datei namens htaccess mit. Diese habe ich ebenfalls in mein id-Verzeichnis hochgeladen und in .htaccess umbenannt. Der Inhalt sieht bei mir aus wie folgt, vielleicht muss man aber auch eine der anderen beiden mitgelieferten Möglichkeiten ausprobieren, YMMV:
RewriteEngine on
RewriteCond %{HTTP:Authorization} !^$
RewriteCond %{QUERY_STRING} openid.mode=authorize
RewriteCond %{QUERY_STRING} !auth=
RewriteCond %{REQUEST_METHOD} =GET
RewriteRule (.*) %{REQUEST_URI}?%{QUERY_STRING}&auth=%{HTTP:Authorization} [L]
Durch diese mod_rewrite Magie werden die request header passend umgeformt.
Wenn das nun klappt muss man nur noch anderen Websites sagen, wo sich die OpenID verbirgt. Dazu muss man im Header der Site folgende Angaben machen6:
In Wordpress kann man das einfach mit dem oben erwähnten Plugin bewerkstelligen, das ist noch etwas einfacher und schaut in der Konfiguration dann so aus:
Und das wars dann auch. Jetzt kann ich die Adresse meiner Website benutzen um mich bei verschiedenen Websites anzumelden.
Wer sich lieber keine Umstände mit der Erstellung und dem Hosting einer OpenID machen möchte, kann das OpenID Delegation Plugin auch nutzen, um die eigene OpenID bei einem Provider7 hosten zu lassen und trotzdem die URL der eigenen Website verwenden. In dem Fall werden dann die OpenID-Anfragen eben einfach an username.myopenid.com weitergeleitet.
Wie man es sich letzen Endes im OpenID-Land einrichtet ist ja eigentlich auch gar nicht so wichtig, die verschiedenen Möglichkeiten werden durch die Offenheit des Protokolls alle gleichberechtigt behandelt. Viele weitere Möglichkeiten sind in dem hervorragendem Post OpenID for non-SuperUsers von Sam Ruby aufgeführt. Besonders die Variante mit YADIS finde ich sehr interessant…
In Zukunft werden sicherlich noch mehr Websites mit OpenID-Unterstützung auftauchen und die Nützlichkeit einer solchen Authentifizierung im gleichen Masse steigen. Bleibt zu hoffen, dass sich weitere große und kleine Anbieter an dieser Idee beteiligen.
(via: interwingly.net und Dr. Nic)
- Hier der sehr erhellende Wikipedia-Eintrag [↩]
- Ein Twitter-Clone [↩]
- Aber doch schon so einige, darunter auch Google, Yahoo, Flickr, Facebook, MySpace, Wordpress… [↩]
- In Worten: Zwei(!) [↩]
- hier also http://instant-thinking.de/id, für eigene Installationen muss die URL natürlich angepasst werden [↩]
- Natürlich wieder durch eigene Werte ersetzen [↩]
- z.B. MyOpenID.com die sind ziemlich toll [↩]
















3 Kommentare ↓
Hab’s aus Faulheit nur überflogen, d.h. man meldet sich z.B. bei meinvz per OpenID an, und kann dann z.B. direkt (per OpenID) weiter zu flickr, googlemail, usw. ohne erneute Anmeldung ? Schön und gut, aber vielleicht möchte ich ja gerade für verschiedene Dienste auch verschiedene Passwörter. Ansonsten entspricht OpenID ja fast einer immer gleichen E-Mail/PW Kombination für entsprechende Dienste, mit der Ausnahme dass man SSO hat und somit die Portal-Logins entfallen. Aber dafür der Aufwand (Aufwand entsteht, denn wenn möchte ich meine OpenID selbst hosten) ?
Generell missfällt mir der SSO und “alles-geht-automatisch” Gedanke irgendwie, weil er nachlässig macht. Das gute alte Beispiel EC-Karte: da geht’s doch auch, warum also nicht andere Passwörter (nichts andere ist eine PIN) sorgfältig geheim halten sich merken (das sollte für jeden machbar sein, wenn sich jemand ein bestimmtes Passwort nicht merken kann, liegt das schlicht an der fehlenden Disziplin
).
Ja, so ungefähr läuft das. Man gibt einmal seine OpenID User/Passwort Kombination ein und kann sich dann unter Angabe der URL der OpenID bei allem anmelden was OpenID unterstützt.
Und du hast Recht, OpenID krankt natürlich an den gleichen Nachteilen wie andere SSO-Verfahren.
Man hätte allerdings im Falle eines Passwort Verlusts (egal ob man es vergessen hat oder ob es bekannt geworden ist) gegenüber der immer gleichen Email/Passwort Kombination den Vorteil, dass man es nur an einer Stelle ändern muss.
Generell ist es natürlich das Optimum für jeden Dienst ein eigenes, sicheres Passwort und möglichst auch einen eigenen Usernamen zu haben. Um das dann aber zu managen braucht man definitiv einen Passwort-Manager.
Ich benutze zu diesem Zweck 1Password, unter Windows scheint Password-Safe ganz nett zu sein und es gibt mit Sicherheit auch eine Linux Lösung…
Dann braucht man aber auch ein sicheres Backup dieser Geschichte, denn ein paar Dutzend sichere Passwörter sind nur sehr schwierig aus dem Gedächtnis zu rekonstruieren. Was wieder zu dem Thema Disziplin führt…
[...] OpenID selber hosten [...]
Schreibe einen Kommentar