Social Software powered by Instant Communities
Springe direkt: zur Navigationzum Inhaltzur Sidebar

Archiv für 'identity2.0'

OpenId Attribute Exchange mit PHP und Janrain

22.05.2009

Ich habe in letzter Zeit wieder mehr mit OpenID gemacht und dabei “Attribute Exchange” entdeckt.
Diese OpenID Erweiterung ermöglicht es, Userdaten des Accounts an die anfragende Seite zu übertragen. Im Gegensatz zur verbreiteten sreg Erweiterung, unterstützt sie aber eine Reihe zusätzlicher Attribute (z.B. Trennung von Vorname und Nachname, mehrere Profil-Urls…). Neben Google (Doku) unterstützt auch myopenid diese Erweiterung.
Die Implementierung ist eigentlich recht schmerzfrei. Leider habe aber nirgends guten Beispielcode gefunden und die Dokumentation zu dem Thema ist insgesamt ungenügend, so dass ich die einfache Lösung unten erst mit viel Trial and Error gefunden habe:

Entscheidend war folgende Information (danke an Rakuno Futani):
Anders als in der Doku angebeben, muss als Namespace anscheinend http://schema.openid.net für die Attribute genutzt werden. Andere Namespaces, z.B. http://axschema.org/contact/email gunktionieren zumindest mit MyOpenid nicht. Erschwerend kommt während der Entwicklung hinzu, dass Google z.B. die Attribute nur bei der allerersten Anfrage  mitsendet und davon ausgeht, dass der anfragende Server diese Daten erfolgreich speichert. Eine leere Response heißt also nicht unbedingt, dass die Anfrage falsch war.

Hier die Beispielimplementierung mitilfe der Janrain PHP Library (die übrigens dringend mal als PHp5 Verison rauskommen sollte).

Request

Dem Request fügt man die AX-Erweiterung hinzu und gibt an, welche Userdaten geholt werden sollen.

<?php
  $axRequestProfileData = array(

    'email'   => 'http://schema.openid.net/contact/email',

    'username' => 'http://schema.openid.net/namePerson/friendly',

    'firstname'   => 'http://schema.openid.net/namePerson/first',

    'lastname'    => 'http://schema.openid.net/namePerson/last',

    'country' => 'http://schema.openid.net/contact/country/home',

    'birthday' => 'http://schema.openid.net/birthDate',

    'gender' => 'http://schema.openid.net/gender',

    'language'    => 'http://schema.openid.net/pref/language',

    'web'     => 'http://schema.openid.net/contact/web/default',

    'blog'     => 'http://schema.openid.net/contact/web/blog',

    'about' => 'http://schema.openid.net/media/biography',

    'image' => 'http://schema.openid.net/media/image/default',

    'fullname' => 'http://schema.openid.net/namePerson/'

  );
    $ax_request = new Auth_OpenID_AX_FetchRequest();    if ($ax_request) {

    foreach($axRequestProfileData as $alias => $url){

        $ax_request->add(Auth_OpenID_AX_AttrInfo::make($url, 1, true, $alias));

    }

    $request->addExtension($ax_request);

  }
?>

Response

Nach der Autentifizierung erhält man dann die Daten aus der Response so:

<?php

  $ax = Auth_OpenID_AX_FetchResponse::fromSuccessResponse($response);

  var_dump($ax->data);

?>

Mehr zu OpenID

07.03.2007

Mit idproxy OpenId auch für Yahoo Accounts

20.02.2007

AOL unterstützt OpenID

16.02.2007

You are currently browsing the archives for the identity2.0 category.

Creative Commons License
This work is licensed under a
Creative Commons Attribution-Share Alike 2.5 License.
t8d blogged mit WordPress