open-web-podcast.png

Sebastian, Christian und ich wünschen euch natürlich frohe Weihnachten und einen guten Rutsch ins neue Jahr… Feiert schön! Damit euch während den Feiertagen nicht so langweilig wird, gibt’s diesmal eine etwas längere Weihnachtsfolge in der wir versuchen einen kleinen Open Web Jahresrückblick bzw. Ausblick zu geben.

Viel Spaß beim hören und bis nächstes Jahr 🙂

Weitere Links zur Sendung gibt’s wie immer im Wiki!

Den Podcast abonnieren:

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 😉

open-web-podcast.png

So, Folge 3 ist fertig! Diesmal leider nur mit Christian und mir da Sebastian bei Radio Fritz ein bisschen Werbung für unseren Podcast gemacht hat 🙂

Die aktuelle Folge behandelt das Thema OAuth von eher allgemeinen Dingen (Anwendungsgebiete, Beispiel-Applikationen, Abgrenzung zu OpenID) bis zur detaillierten Funktionsweise des offenen Standards.

Ich freue mich wie immer über Kommentare und Anregungen 🙂

Die Links zur Sendung findet ihr hier!

Den Podcast bekommen:

In der aktuellen Folge (Episode 5: The Portable Contacts Initiative) sprechen John McCrea, Joseph Smarr und Chris Messina über das Portable Contacts – Projekt über welches ich vor kurzem noch so gescholten habe… Und ich muss sagen, ich hatte unrecht! Ich glaube kleine Gruppen mit dem Fokus auf ein spezielles Problem können wesentlich effektiver arbeiten als eine so große und über die ganze Welt verstreute Organisation wie DataPortability (da wird wohl auch die Steering Group nichts ändern können… aber man wird sehen).

Die (Portable Contacts (1.0 Draft B) – Spezifikation basiert auf sehr vielen aus dem DataPortability – Umfeld bekannten Techniken wie z.B. XRDS-Simple als Discovery-Service und OAuth für die Authentifizierung.

Was mir besonders gefällt, ist das Contacts Schema welches hauptsächlich auf dem (wenn auch etwas abgeänderten) vCard-Standard basiert und fehlende Felder von anderen Standards wie z.B. OpenSocial übernommen wurden. Dass es auch anders geht, hat z.B. das AX-Schema bewiesen…

Die Verbindung zu Microformats

Schade dass die vCard nicht zu 100% übernommen wurde… sonst hätte man ohne größere Änderungen auch die JSON-Serialisierte hCard (jCard) in den Prozess integrieren können. Spannend wäre es vor allem für Services wie Twitter, die das Freundesnetzwerk sowieso mit hCards auszeichnen.

Vergleich:

jCard

{
  "fn" : "Max Mustermann",
  "email":
    [{
      "value": "max@example.com",
      "type": ["work"],
    }]
}Code-Sprache: JSON / JSON mit Kommentaren (json)

Portable Contacts 1.0 Draft B

{
  "name" : "Max Mustermann",
  "emails":
    [{
      "value": "max@example.com",
      "type": "work",
    }]
}Code-Sprache: JSON / JSON mit Kommentaren (json)

Man erkennt zumindest eine Ähnlichkeit 🙂

emailtoid.logo.png

EMAIL to ID ist ein Service, der eine E-Mail – Adresse zu OpenIDs macht.

Emailtoid is a simple mapping service that enables the use of email addresses as OpenID identifiers.

EMAIL to ID will kein neuer Provider sein, sondern sieht sich selbst nur als Übergangslösung bis E-Mail Services (z.B. GMX oder GMail) selbst diesen Dienst anbieten.

Der Login-Prozess soll folgendermaßen ablaufen:

When a user enters in an email address, there is an xrds discovery made on the top level domain (eg, gmail.com). If the XRDS document contains an Emailtoid mapper or email transformation template, use that. If not, then you make the same request on emailtoid.net to get the mapper document and send the email to there. Emailtoid is a fallback.

Wie genau das Mapping oder das XRDS-Dokument aussehen soll ist noch nicht spezifiziert, wird aber demnächst hier zu finden sein.

Macht eine E-Mail – Adresse als OpenID Sinn?

In Zukunft steht sicherlich die URL im Zentrum des Authentifizierungsprozesses, da sich über sie einfach mehr Informationen transportieren lassen (seien es Meta-Information oder Semantisches HTML). Auch das Semantische Web basiert auf URIs, um verschiedene Informationen zu vernetzen. Aus diesen Gründen sollte man den User mal so langsam an diese neuen Umstände gewöhnen 😉

Mit EMAIL to ID kann der Nutzer seine bestehenden Gewohnheiten (Anmelden per E-Mail – Adresse) beibehalten und trotzdem die Vorteile von OpenID nutzen (Simple Lösung für ein scheinbar schwieriges Problem… hat was vom Ei des Kolumbus).

Warum kein eigener Standard?

Ein neuer OpenID Standard auf Basis von E-Mail – Adressen (wie hier angedacht) würde zusätzlichen und unnötigen Implementierungsaufwand bedeuten (nimmt man an, die URLs sind die Zukunft), den man sich bei EMAIL to ID sparen kann. EMAIL to ID mappt eigentlich nur eine E-Mail – Adresse auf eine URL http://emailtoid.net/mapper?email=jane@example.com und entspricht somit einer vollwertigen OpenID (keine Anpassungen am bisherigen Standard nötig).

(via)

Da XRDS-Simple auch eine zentrale Rolle bei DataPortability spielen wird, hab ich mir das Format nochmal vorgenommen. (Im folgenden Text setze ich, der Einfachheit halber, XRDS mit XRDS-Simple gleich auch wenn es technisch nicht ganz korrekt ist)

XRDS-Simple-Large.png

XRDS-Simple ist in erster Linie eine einfache Form der Service-Discovery, von der Idee her ähnlich wie z.B. die Web Services Description Language (WSDL).
XRDS beschränkt sich, im Gegensatz zu dem wesentlich komplexeren WSDL, auf die Beschreibung der Service URLs/URIs und wie man sie nutzt (POST oder GET).

Vom Aufbau her ist XRDS-Simple dem YADIS Format (OpenID-Autodetection) sehr ähnlich:

<XRDS xmlns="xri://$xrds">
  <XRD xmlns:simple="http://xrds-simple.net/core/1.0"
          xmlns="xri://$XRD*($v*2.0)" version="2.0">
    <Type>xri://$xrds*simple</Type>
    <Service>
      <Type>http://example.net/some_type</Type>
      <URI simple:httpMethod="POST">
        http://example.com/resource
      </URI>
    </Service>
  </XRD>
</XRDS>Code-Sprache: HTML, XML (xml)

Der wichtigste Teil eines Services ist der Type welcher den Typ der URI beschreibt und die URI welche beschreibt unter welcher URI der Service zu erreichen ist.

Ein paar Beispiele für ein paar klassische Services:

FOAF
type
http://xmlns.com/foaf/0.1/
url
https://web.archive.org/web/20090825215938/http://www.mybloglog.com:80/buzz/members/pfefferle/foaf/
hCard
type
http://purl.org/uF/hCard/1.0/
url
https://web.archive.org/web/20100413121636/http://www.mybloglog.com:80/buzz/members/pfefferle/hcard
APML
type
https://github.com/apml/spec-0.6
url
http://notizblog.org/apml/
OPML
type
http://www.opml.org/spec2
url
http://ma.gnolia.com/opml/default/people/pfefferle

Neben dem <Type> kann für die URI auch noch ein <MediaType> (nichts anderes als der MIME-Type (RFC2046)) gesetzt werden, der beschreibt um was es sich bei dem Verlinkten handelt.

Beispiel: <MediaType>text/html</MediaType>

Mit diesem einfachen Prinzip lassen sich auf einfache Weise nahezu alle Services beschreiben.

Vorteile von XRDS-Simple? Meiner Meinung nach gibt es zwei wesentliche Gründe XRDS einzusetzen.

Einheitliche Erkennung

XRDS vereinfacht die automatische Service-Erkennung, da nur noch ein Meta-Tag interpretiert werden muss:

<meta http-equiv="X-XRDS-Location" content="http://example.com/xrds" />Code-Sprache: HTML, XML (xml)

statt jeder Meta-Tag einzeln:

<link rel="meta" type="text/xml" title="APML" href="..." />
<link rel="meta" type="text/xml" title="OPML" href="..." />Code-Sprache: HTML, XML (xml)

One file to detect them all 🙂

Information Hiding

Ein weiterer wesentlicher Aspekt der Autodetection ist die Sicherheit… nicht jeder möchte seine Attention-Daten (APML) oder seine hCard frei zur Verfügung stellen. Über XRDS-Simple ist es möglich, diese Informationen zu bündeln und z.B. nur über OpenID AX oder OAuth zugänglich zu machen.

Ein Beispiel dazu: XRDS-Simple als zentraler ServiceCatalogue

OAuth discovery

Der Vollständigkeit halber sollte man erwähnen dass XRDS-Simple eigentlich ein „Nebenprodukt“ von OAuth Discovery ist.

The first draft of OAuth Discovery published four months ago started a dialog and was the main driver behind the development of XRDS-Simple. #

Mehr zu diesem Thema bei hueniverse oder Chris Messina.

Vor ein paar Wochen wurde XRDS-Simple 1.0 (Draft 1) veröffentlicht. XRDS-Simple ist ein Standard, der auf bestehenden Standards der XRI Community aufbaut, auf den z.B. auch das von OpenID bekannte Yadis-Format basiert.

XRDS-Simple provides a format and workflow for the discovery of resources metadata, and other linked resources. As web services continue to grow, applications utilize a wider range of web services and resources across multiple providers. XRDS-Simple allows providers to document their resources in a machine-readable way, which can be automatically discovered by consumer applications.

XRDS-Simple bietet also ein recht simples Format um auf Services und andere „linked recources“ zu verweisen.

XRDS-Simple als zentraler ServiceCatalogue

Wie man dieses Format für das DataPortability Projekt nutzen kann hat Christian Scholz in seinem Post „The first Data Portability Use Case (somewhat technical)“ schön zusammengefasst.

Nehmen wir an, ich melde mich bei einem neuen Dienst an und möchte meine Daten, die ich an anderen Stellen im Internet angegeben habe, wiederverwenden. Um nicht alle meine Profil-URLs immer wieder per Hand angeben zu müssen, kam die Idee eines ServiceCatalogues auf.

Der ServiceCatalogue soll an zentraler Stelle alle Informationen die über mich im Web verfügbar sind (z.B. als hCard, XFN, FoaF, usw. formatiert) bereitstellen.

<XRDS xmlns="xri://$xrds">
  <XRD xmlns:simple="http://xrds-simple.net/core/1.0" xmlns="xri://$XRD*($v*2.0)" version="2.0">
    <Type>xri://$xrds*simple</Type>
    <Service priority="10">
      <Type>http://www.w3.org/2006/03/hcard</Type>
      <URI simple:httpMethod="GET">http://pownce.com/pfefferle</URI>
    </Service>
    <Service priority="20">
      <Type>http://gmpg.org/xfn/11</Type>
      <URI simple:httpMethod="GET" priority="10">http://twitter.com/pfefferle</URI>
      <URI simple:httpMethod="GET" priority="20">http://pownce.com/pfefferle</URI>
    </Service>
  </XRD>
</XRDS>Code-Sprache: HTML, XML (xml)

Das Beispiel zeigt z.B. die URL zu meiner hCard bei Pownce und meinen Freundesnetzen bei Pownce und Twitter. Um diese Information vor unerlaubten Zugriffen zu schützen, könnte die XRDS-Simple URL mit OAuth geschützt oder per OpenID AX angefragt werden.

XRDS-Simple mit AX abfragen

Um XRDS-Simple via AX anzufragen, müsste man zuerst ein AX-Schema definieren:http://dataportability.org/schema/serviceCatalogue Label service catalogue Description The url to a XRDS-Simple formatted service catalogue Example http://example.org/sc.xrds Formatting http://www.w3.org/2001/XMLSchema#anyURI

und unter http://dataportability.org/schema/serviceCatalogue bereitstellen. Leider funktioniert diese Art der Bereitstellung nur wenn einige OpenID-Provider diese AX-ServiceCatalogue-URL auch implementieren.