Ich hatte in den letzten Monaten die Möglichkeit, mich ein bisschen intensiver mit ID4me zu beschäftigen. Nach anfänglicher Skepsis finde ich die Idee mittlerweile extrem charmant.

Im letzten Jahr haben sich einige deutsche Firmen zusammen geschlossen um mit netID bzw. VERIMI zwei konkurrierende Single-Sign-On Dienste zu entwickeln. Beide Systeme basieren zwar auf dem offenen Standard OpenID Connect, scheinen aber mindestens genauso restriktiv zu sein. netID wird nur von einer begrenzten Anzahl von Diensten angeboten und VERIMI setzt einen zentralen Account bei verimi.de voraus.

ID4me basiert zwar auch auf OpenID Connect, ist aber kein „Yet Another Login-Service“, wie ich anfangs fälschlicherweise vermutet hatte. ID4me erweitert die OpenID Spezifikation mit einer DNS-Discovery und funktioniert vollkommen dezentral.

The ID4meidentifier, consisting of a valid DNS hostname (or, potentially, of an email address), would allow users to log into any online service via a single account, similarly to the OTT-run services, but would also allow users to choose the manager of their identifier among any number of compatible providers.

[…]

To foster adoption and remove barriers to market entry, ID4me builds on public and open standards (OpenID Connect and DNSSEC) and releases all its specifications as open, royalty-free standards, submitting them to the appropriate Internet standardization bodies. Entities already running single sign-on systems based on OpenID Connect should be able to extend them to provide ID4meidentifiers quite easily.

ID4me – General overview

Wie funktioniert ID4me genau?

Der ID4me DNS Eintrag sieht wie folgt aus:

_openid.notiz.blog. 600 IN TXT "v=OID1;iss=id.test.denic.de;clp=identityagent.de"Code-Sprache: JavaScript (javascript)

Dabei steht v für die Protokoll-Version, iss für den Issuer (der Endpunkt der für die Autentifizierung verantwortlich ist) und clp für Claims Provider (der Endpunkt über den „Claims“ (beispielsweise Profildaten) abgefragt werden können).

Was macht ID4me so spannend?

Zum selbst hosten einer OpenID, braucht man eine Domain, Webspace und eine OpenID Connect – Library, außerdem muss man wissen wie man diese installiert und betreibt. Um diese Komplexität zu reduzieren hat man sich bei OpenID 1.1 schon 2006 mit dem Thema „Delegated Authentication“ beschäftigt.

If the End User’s host is not capable of running an Identity Provider, or the End User wishes to use one running on a different host, they will need to delegate their authentication. For example, if they want to use their website, http://www.example.com/, as their Identifier, but don’t have the means, or desire, to run an Identity Provider.

Klassisch braucht OpenID Connect für die „Delegation“ mindestens ein WebFinger – Dokument. Das heißt man braucht „nur“ noch eine Domain, Webspace und man muss wissen wie WebFinger funktioniert.

ID4me konzentriert sich ausschließlich auf das Prinzip der „Delegated Authentication“ und reduziert die Anforderungen auf eine Domain!

Die Domain ist dadurch an keinen festen OpenID-Provider (Issuer) gebunden und kann bei einem Umzug zu einem neuen Registrar, weiterhin auf den alten Issuer zeigen, bzw. den Issuer beliebig wechseln. Solange sich die Domain nicht ändert, sind Hoster, Domain-Registrar, OpenID-Provider oder E-Mail – Anbieter austauschbar.

Noch ein schöner Nebeneffekt: ID4me tritt nicht in Konkurrenz zu anderen OpenID Connect Providern wie beispielsweise die oben erwähnten netID oder VERIMI. Im Gegenteil, jeder dieser Anbieter sollte mit wenig Aufwand über ID4me „delegierbar“ sein.

Bei meiner Recherche zu XRDS bzw. XRI (dem XML-Standard auf dem z.B. auch die OpenID und OAuth Discovery basieren) bin ich (dank Thomas Huhn) auf den XRI Busy Web Developer’s Guide gestoßen und jetzt frage ich mich, warum nicht alle Spezifikationen so erklärt werden können.

Das <XRDS /> Element wird z.B. so beschrieben:

Note: Busy web developers will almost never ask for this type of document.

Zu Deutsch: Es wird zwar der Vollständigkeit halber erwähnt, aber ignorier es doch einfach 🙂

Großartig!

Falls jemand ein „JanRain OpenID Lib for busy Web Developers“ oder „OpenSocial for busy Web Developers“ kennt… ich wäre interessiert 😉