OpenID, XRI, XRDS, and Portable Content

I continue to dig into what it would take to build a good Social Network Contact Management System. Yesterday, I had a long discussion with Arron Kallenberg from DandyID. I had talked about my difficulties with the DandyID API and he wanted to address them. In a nutshell, their API is evolving and the documentation had not caught up with the current usage. Now that I know about the updates, I’ve got the API working nicely.

As part of the discussion, we talked about Portable Contacts as a standardized method of receiving contact information that people enter into their social networks. DandyID provides access to information in Portable Contacts format. I also learned that Plaxo is supporting the Portable Contacts API. Details can be found at Portable Contacts at Plaxo. The Plaxo API Endpoint requires OAuth or HTTP Basic authentication, so I started looking at doing OAuth authentication from PHP. I still need to dig deeper into this, especially for trying to call functions from a php script that isn’t part of a webpage.

As I read the Plaxo documentation, I also got interested in XRDS Simple discovery. With that, let me talk about OpenID, XRI and XRDS. OpenID is a method of sharing authentication. In other words, you can use an OpenID userid and password to login to any site that accepts OpenID. This makes it so you need to remember less userids and passwords.

Some people express concern about OpenID phishing. If someone manages to get your OpenID password, they can get to all of the sites you’ve used OpenID with. On the other hand, if someone gets your password, you only need to change it once, instead of either changing the password at a lot of sites which have the same password, or keeping a file somewhere which lists all your passwords for every site you use. I know that I can’t remember all of the passwords I have for all of the sites I’ve registered with, without a bit of help.

Also, using OpenID delegation, you can point back to your site when you use OpenID. For example, I always use OpenID pointing back to my blog when I place comments via Blogger.

This leads me to XRI. XRI is the extensible resource identifier. It is sort of like a URL on steroids. There have been major arguments over when to use URIs and XRIs, but being the geek I am, I have two XRI identifiers that I use regularly, =aldon.hynes and @ahynes1. In XRI, a personal name starts with an equal sign, and an organization name starts with an at sign. I registered @ahynes1 since that works out to be my identification on Twitter, Identi.ca and other services.

One of the things that is interesting about XRIs is that OpenID version 2.0 supports XRIs. So, I can log into services that support OpenID V 2.0 using my id @ahynes1

To support XRI, XRDS, the Extensible Resource Descriptor Sequence was created. It can be used to discover information about a resource. As an example, in OpenID V 2.0, you would use XRDS to find the appropriate OpenID server for a given XRI identity.

With this as groundwork, I am now back to Portable Contacts. My contact information and the other services that I’ve subscribed to is additional information about me and my resources. So, it would be great if we could use XRDS to find servers that provide Portable Contact information about me.

It looks like I can do this using my XRI accounts and DandyID or Plaxo. Both 2idi.com which I use for my =aldon.hynes identity and 1id.com which I use for my @ahynes1 identity provide the ability to edit the ‘service endpoints’ that are revealed through XRDS.

As best as I can tell, what I need to do is add

<service>
<type>http://portablecontacts.net/spec/1.0</type>
<URI>http://www.plaxo.com/pdata/contacts</URI>
</service>

to my XRDS document, and people should be able to find my portable contact information via Plaxo. If I use http://www.dandyid.org/api/poco/ as my URI, they should be able to get my portable contact information from DandyID.

1id.com uses a webform to create this information, and I need to choose options like select, append and priority. I took the default values and we’ll see if they work

You can see my XRDS documents here and .

The next step is to add pointers to them in the header of my blog using the format
<meta http=equiv=”X-XRDS-Location” content=”http://xri.net/=aldon.hynes?_xrd_r=application/xrd%2bxml;sep=false” />

I need to decide if I should use =aldon.hynes or @ahynes1 and if I should have those point to Plaxo or DandyID. Then, I need to find good ways of testing and taking advantage of this. It seems as if Portable Contacts, discovered through XRDS may be a great building block for OpenSocial and other efforts to share information across platforms.

If you’re a non technical blogger, you probably don’t want to start playing with this yet, but you should keep it in the back of your mind as part of the direction social networks may be heading. If you’re more of a geek, kick it around. Share your ideas. Let’s see what we can do with these tools.