Difference between revisions of "JabberID and OpenID combination : XEP-0154 User-Profile export"

From XMPP WIKI
Jump to navigation Jump to search
m
 
m
 
Line 188: Line 188:
== Implementations & Services ==
== Implementations & Services ==
* [http://openid.xmpp.za.net/ The South African XMPP Federation OpenID Server]
* [http://openid.xmpp.za.net/ The South African XMPP Federation OpenID Server]
* [http://www.ejabberd.im/mod_profile ejabberd mod_Profile] with partial support for XEP-0154
* [http://www.ejabberd.im/mod_profile ejabberd mod_profile] with partial support for XEP-0154
* [http://norman.rasmussen.co.za/107/xmpp-auth-for-openid/ Patch for the PHP OpenID library] with a ''"sprinkle of [http://xmpp.org/extensions/xep-0070.html XEP-0070]"''
* [http://norman.rasmussen.co.za/107/xmpp-auth-for-openid/ Patch for the PHP OpenID library] with a ''"sprinkle of [http://xmpp.org/extensions/xep-0070.html XEP-0070]"''
* [http://jabber.se/ jabber.se] using ejabberd mod_Profile
* [http://www.jabber.se/ www.jabber.se] using ejabberd mod_profile

Latest revision as of 19:08, 24 July 2010

1. The user logs on for the first time to OpenID server with his JID. The OpenID server asks to the user if he wants to import his profile from his personal pubsub node. The user accepts and the OpenID server requests the profile:

<iq type='set'from='openid.shakespeare.lit'
    to='hamlet@denmark.lit'  id='sub1'>
  <pubsub xmlns='http://jabber.org/protocol/pubsub'>
    <subscribe
        node='http://jabber.org/protocol/profile'
        jid='openid.shakespeare.lit'/>
  </pubsub>
</iq>

2. The XMPP server of the user replies to the OpenID server that its subscription is pending:

<iq type='result'
    from='hamlet@denmark.lit'
    to='openid.shakespeare.lit"
    id='sub1'>
  <pubsub xmlns='http://jabber.org/protocol/pubsub'>
    <subscription
        node='http://jabber.org/protocol/profile'
        jid='openid.shakespeare.lit'
        subscription='subscription='pending''/>
  </pubsub>
</iq>

3. The user receives a pubsub subscription approval form from his XMPP server :

<message to='hamlet@denmark.lit/elsinore' from='denmark.lit' id='approve1'>
  <x xmlns='jabber:x:data' type='form'>
    <title>PubSub OpenID subscriber request</title>
    <instructions>
      To approve this entity's subscription request,
      click the OK button. To deny the request, click the
      cancel button.
    </instructions>
    <field var='FORM_TYPE' type='hidden'>
      <value>http://jabber.org/protocol/pubsub#subscribe_authorization</value>
    </field>
    <field var='pubsub#subid' type='hidden'><value>123-abc</value></field>
    <field var='pubsub#node' type='text-single' label='Node ID'>
      <value>http://jabber.org/protocol/profile</value>
    </field>
    <field var='pusub#subscriber_jid' type='jid-single' label='Subscriber Address'>
      <value>openid.shakespeare.lit</value>
    </field>
    <field var='pubsub#allow' type='boolean'
           label='Allow this JID to subscribe to this pubsub node?'>
      <value>true</value>
    </field>
  </x>
</message>

4. The user sends the subscription approval form to allow the OpenID server to subscribe to the node and retrieve the profile :

<message from='hamlet@denmark.lit/elsinore' to='denmark.lit' id='approve1'>
  <x xmlns='jabber:x:data' type='submit'>
    <field var='FORM_TYPE' type='hidden'>
      <value>http://jabber.org/protocol/pubsub#subscribe_authorization</value>
    </field>
    <field var='pubsub#subid'>
      <value>123-abc</value>
    </field>
    <field var='pubsub#node'>
      <value>http://jabber.org/protocol/profile</value>
    </field>
    <field var='pubsub#subscriber_jid'>
      <value>openid.shakespeare.lit</value>
    </field>
    <field var='pubsub#allow'>
       <value>true</value>
    </field>
  </x>
</message>

5. The XMPP server of the user sends the subscription approval notification to the OpenID server :

<message
    from='denmark.lit'
    to='open.shakespeare.lit'
    id='approvalnotify1'>
  <pubsub xmlns='http://jabber.org/protocol/pubsub'>
    <subscription node='http://jabber.org/protocol/profile' jid='open.shakespeare.lit' subscription='subscribed'/>
  </pubsub>
</message>

6. The OpenID server discovers the profile :

<iq type='get'
    from='open.shakespeare.lit'
    to='hamlet@denmark.lit'
    id='disco1'>
  <query xmlns='http://jabber.org/protocol/disco#info'/>
</iq>

<iq type='result'
    from='hamlet@denmark.lit'
    to='openid.shakespeare.lit'
    id='disco1'>
  <query xmlns='http://jabber.org/protocol/disco#info'>
    <identity category='account' type='registered'/>
    ...
    <feature var='http://jabber.org/protocol/profile'/>
    ...
  </query>
</iq>

7. The OpenID server retrieves the profile :

<iq type='get'
    from='openid.shakespeare.lit'
    to='hamlet@denmark.lit'
    id='iq1'>
  <profile xmlns='http://jabber.org/protocol/profile'/>
</iq>

<iq type='result'
    from='hamlet@denmark.lit'
    to='openid.shakespeare.lit'
    id='iq1'>
  <profile xmlns='http://jabber.org/protocol/profile'>
    <x xmlns='jabber:x:data' type='result'>
      <field var='FORM_TYPE' type='hidden'>
        <value>http://jabber.org/protocol/profile</value>
      </field>
      <field var='nickname'>
        <value>Hamlet</value>
      </field>
      <field var='country'>
        <value>DK</value>
      </field>
      <field var='locality'>
        <value>Elsinore</value>
      </field>
      <field var='email'>
        <value>hamlet@denmark.lit</value>
      </field>
    </x>
  </profile>
</iq>

8. The user modifies later his profile by adding a new field :

<iq type='set' id='pub1'>
  <pubsub xmlns='http://jabber.org/protocol/pubsub'>
    <publish node='http://jabber.org/protocol/profile'>
      <profile xmlns='http://jabber.org/protocol/profile'>
        <x xmlns='jabber:x:data' type='result'>
          <field var='weblog'>
            <value>http://www.denmark.lit/blogs/princely_musings</value>
          </field>
        </x>
      </profile>
    </publish>
  </pubsub>
</iq>

9. The OpenID server receives the profile update :

<message to='openid.shakespeare.lit' from='hamlet@denmark.lit' type='headline' id='foo'>
  <event xmlns='http://jabber.org/protocol/pubsub#event'>
    <items node='http://jabber.org/protocol/profile'>
      <item>
        <profile xmlns='http://jabber.org/protocol/profile'>
          <x xmlns='jabber:x:data' type='result'>
            <field var='weblog'>
              <value>http://www.denmark.lit/blogs/princely_musings</value>
            </field>
          </x>
        </profile>
      </item>
    </items>
  </event>
</message>

Reference

Implementations & Services