I am really getting to hate all the sites that matter-of-factly ask you for your login and password to your GMail/Hotmail/Yahoo account so you can "tell your friends" about the new website you joined. This was a dodgy proposition the first time I saw it nearly 2 years ago, and I still think its dodgy no matter how big and popular the site is, no matter how nicely they ask for it. My login and email provides unfettered access to my email and any of the associated services. It's simply STUPID to trust that to anybody. I image it's akin to leaving your PIN number at BestBuy so they can purchase something on your behalf when you're not around, just because their management thinks you's like it.
I'm not against the notion of sharing my whereabouts with people, but my passwords? Nope, no chance. That doesn't mean I can't share my list of like-minded friends with new and exiting websites I join. All that's needed is a more sensible and secure way to share information that leaves third-party access up to the discretion of the end-user at all times.
Enter the Contact-Management API
Suppose each of the big email engines confirmed to a small data-sharing API... Basically just a small agreement that when you enter a URL like this:
http://mail.somesite.com/sharing/7a45e9b923749d839f8f093eee
...The URL part would be an MD5 sum or one half of a GPG-key, unique to the third-party requesting the shared data, and unique to the website hosting your email account. A well-formed request like the one above would provide a response like this:
bob@example.com,Robert Terwilliger
tina@somesite.com,Tina Argent
...
melvin@somesite.com,Mel Absolute
This is a simplistic example. The response could easily be a microformat or RDF or any format that could be easily understood among third-parties.
How Sharing Works in the Contact-Management API
When the need arises to share your contacts with another website the site making the request would email you with a 'sharing' key. On opening the email you would copy the key into your email site's "Contact Sharing Manager" along with an expiry date selected by you. It would look something like this:
r.rowa td {background-color:#ccf} tr.rowb td {border-top:1px solid #ccc}
Now the you get to decide who, how often and when a third-party gets access to your contacts. Without sharing your password. And the best part is the sharing is under the control of the user.
More advanced features could be added at the discretion of the email portal, like providing the user a way to select which contacts get shared, on a per-sharing-key basis, access logs (in case the website keeps coming back to get more contacts).
I think this is simple enough to be managed by almost anyone who grasps the utility of sharing their contact info when they sign on to a new website.
Preventing Contact Siphoning
How Much Data to Share?
The user-selected expiry date for sharing could prevent some abuse of sites extracting too much from a credulous user, especially if it's understood within the API that there is some upper-limit to how many contacts get shared per-request. This could curb abuse when the API only coughs up 5-10 contacts a day, giving the user an opportunity to monitor a new website through the shared contacts and decide if he wants to "open up" more or all of their contacts for sharing. If the newly joined website turns out to be a bit dodgy, the user can stem the tide by revoking the key immediately. Revoked keys could be tracked by the email provider and possibly warn others of high incidence of user-revokes.
Where Does the Data Go?
We can take the security/paranoia up a notch by requiring the sharing key to not return raw data, but decrypt a URL at the third party making the request. This URL would be an endpoint where the email provider could "inject" the contacts into your third-party account. This would be a handy way to verify where the data is being sent to, and enforcement could be done by declaring ahead of time which domain the Sharing Key belongs to. This two-step process would stop anonymous third-parties from "phishing" popular email portals for Sharing Keys.
This is only the beginning of the protection measures that could be provided. Optionally logging, tracing and emailing usage reports could also enhance the end-user's control over their personal data sharing. Heuristics or machine-learning could be applied at the email portal to build a profile of legitimate use of the Contact-Management API.
Nice Idea, But Who's Going to do the Hard Work?
Well, even as I wrote this I considered the possibility that this sort of sharing is already developed at that new Data Portability workgroup but they are directing their energy in documenting and organizing the work that's already been done, a lot of which is just different markup standards and microformats for identifying what kind of data you're sharing instead of how to control sharing. I was a little disappointed to see that, but they're pretty up front that they're not about developing new technologies.
Then I looked at Google's OpenSocial API Developer's Guide but at a glance the security is based on trust of a site in general. I think if I wrap my head around it you could make the OpenSocial API into something that provides some of the features I describe, but Googles documentation actually says: "but this decision is up to the container" - the container being website that can host OpenSocial gadgets so really it's up to the site itself if it trusts third party sites so no, it's not within the user's control.
In the Future, Everybody Will Share Data for More Than Fifteen Minutes
I've only made a cursory survey of the options and features available in either Data Portability or OpenSocial but I still think there is a gap here that would provide untold value to the people who actually use, instead of those who create the places to visit in, the Internet. Greater control exercised by the end-user has been the trend in more recent waves of popularity on the Internet. Now it's time for users to do more than just cast a vote on their favourite bookmarks. The Contact-Management API is one step toward the inexorable goal of letting the end user decide who, where, when and how often their data is shared.
Tags: data portability, contact management, social graph, security, architecture