<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" gd:etag="W/&quot;C0cGSHoyeyp7ImA9WhVUFUU.&quot;"><id>tag:blogger.com,1999:blog-4330666749808011734</id><updated>2012-05-20T23:17:09.493-07:00</updated><category term="diso" /><category term="openid" /><category term="oauth" /><category term="webfinger" /><category term="openid eaut email email-address verification" /><category term="wave" /><category term="open friend requests" /><category term="XRD" /><category term="oinvite" /><title>Sappenin on Software</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://softwareblog.sappenin.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://softwareblog.sappenin.com/" /><author><name>David Fuelling</name><uri>https://profiles.google.com/113398800805507648290</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-eofoV5vnRLc/AAAAAAAAAAI/AAAAAAAAFHU/wSyfhYSgGwE/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/SappeninInSoftware" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="sappenininsoftware" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;D0UCRn07fSp7ImA9WxBaGUg.&quot;"><id>tag:blogger.com,1999:blog-4330666749808011734.post-2911376184702602116</id><published>2010-03-29T20:30:00.000-07:00</published><updated>2010-03-30T06:21:07.305-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-30T06:21:07.305-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openid" /><category scheme="http://www.blogger.com/atom/ns#" term="XRD" /><category scheme="http://www.blogger.com/atom/ns#" term="open friend requests" /><category scheme="http://www.blogger.com/atom/ns#" term="webfinger" /><category scheme="http://www.blogger.com/atom/ns#" term="oauth" /><category scheme="http://www.blogger.com/atom/ns#" term="oinvite" /><title>OInvite Draft-3 Released</title><content type="html">It's been a while since I've written about OInvite (or anything for that matter).  But a few days ago, I had the chance to spend some more time updating the OInvite spec.  Below is an overview of some things that have changed.  For more information and to read the updated spec, checkout &lt;a href="http://oinvite.net/"&gt;http://oinvite.net&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;OInvite Core&lt;/b&gt;&lt;/div&gt;&lt;div&gt;First of all, I've decided to create a base specification called OInvite Core.  This is what I'm referring to when I advertise "Draft 3".  OInvite Core defines an XML based request/response document format to define the parameters surrounding an invitation.  This core spec is meant to be a baseline for extension profiles of OInvite that can work appropriately under different situations.  For example, there will be an HTTP profile of OInvite that specifies discovery and other aspects which work well for web applications.  At the same time, I'm envisioning it might make sense to have a slightly different profile for XMPP, Google Wave, and posibbly something for regular email (heavy underline the "possibly" in that one).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;OInvite Verification Extensions&lt;/b&gt;&lt;/div&gt;&lt;div&gt;The core spec provides a brief outline of the process a server should follow before prompting a user that a new invitation has been received.  This is known as OInvite &lt;i&gt;verification&lt;/i&gt;, but the exact details of how or what to verify are left to extensions to define.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Spam Prevention&lt;/b&gt;&lt;/div&gt;&lt;div&gt;You may notice that previous versions of OInvite had a Proof-of-Work scheme defined that worked to reduce and/or eliminate spam invitations.  I'm still working to define this, but it will be in the form of an optional extension.  Best of all, the core spec includes a way for servers to advertise any verification extensions in a programmatic way.  Since these extensions are optional, individual implementors will have lots of freedom to experiment with the best verification mechanisms to protect from spam, verify senders &amp;amp; receivers, and ensure that every aspect of a particular OInvite has what it needs to work with a recipient's systems.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;OInvite over HTTP&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Next on my list is to create an HTTP profile of OInvite that relies on OpenID+WebFinger for authentication, XRD for discovery, and OAuth for authorization.  This latter piece is going to be very interesting.  It's starting to look like OInvite could be an automatic way for two users to exchange OAuth authorization tokens, which could open up some interesting new possibilities for private resource sharing across domains.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;More to come!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4330666749808011734-2911376184702602116?l=softwareblog.sappenin.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://softwareblog.sappenin.com/feeds/2911376184702602116/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://softwareblog.sappenin.com/2010/03/oinvite-draft-3-released.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4330666749808011734/posts/default/2911376184702602116?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4330666749808011734/posts/default/2911376184702602116?v=2" /><link rel="alternate" type="text/html" href="http://softwareblog.sappenin.com/2010/03/oinvite-draft-3-released.html" title="OInvite Draft-3 Released" /><author><name>David Fuelling</name><uri>https://profiles.google.com/113398800805507648290</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-eofoV5vnRLc/AAAAAAAAAAI/AAAAAAAAFHU/wSyfhYSgGwE/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C08MRHY_fip7ImA9WxBaGUs.&quot;"><id>tag:blogger.com,1999:blog-4330666749808011734.post-7795964352919774149</id><published>2009-06-03T08:34:00.000-07:00</published><updated>2010-03-30T08:11:25.846-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-30T08:11:25.846-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="diso" /><category scheme="http://www.blogger.com/atom/ns#" term="oinvite" /><title>Announcing OInvite</title><content type="html">&lt;span style="font-size:100%;"&gt; &amp;lt;Some Context&amp;gt;&lt;br /&gt;A while back, I posed a &lt;a href="http://groups.google.com/group/diso-project/browse_thread/thread/b058aa0f444e82a2/"&gt;question to the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Diso&lt;/span&gt; mailing list&lt;/a&gt; wondering if there was any work being done to enable cross-domain "friend requests" in the context of social networks and other systems that have the notion of "friend lists".&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;/&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Some &lt;/span&gt;&lt;span style="font-size:100%;"&gt;Context&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;As I soon found out, this is a pretty involved topic, so I collected my thoughts and shared them with the world in a &lt;a href="http://softwareblog.sappenin.com/2009/06/case-for-open-friend-request-protocol.html"&gt;blog post here&lt;/a&gt; (I recommend reading that post for a lengthy--if &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;surfacey&lt;/span&gt;--background relating to the issues surrounding friend requests, open vs. closed communications relationships, and my general musings on this topic).&lt;br /&gt;&lt;br /&gt;At the same time, I formalized some more thoughts surrounding this idea into a spec I'm calling &lt;a href="http://oinvite.net/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;OInvite&lt;/span&gt;&lt;/a&gt;.  Perhaps "spec" is too formal of a word.  In reality, I just like to use the &lt;a href="http://xml.resource.org/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;xml&lt;/span&gt;2&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;rfc&lt;/span&gt;&lt;/a&gt; tool, so it was more enjoyable to try to hone my ideas in the confines of a specification. &lt;/span&gt;&lt;span style="font-size:100%;"&gt;To say that this document is anything close to a spec would be an understatement!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;:)&lt;br /&gt;&lt;br /&gt;At any rate, the idea behind &lt;a href="http://oinvite.net/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;OInvite&lt;/span&gt;&lt;/a&gt; is to codify &lt;span style="font-style: italic;"&gt;an open protocol that helps facilitate the creation of unsolicited "communications relationships" (i.e., friend requests) between various parties in unaffiliated domains without the worry of spam&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Some key attributes of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;OInvite&lt;/span&gt; (see my musings post &lt;a href="http://softwareblog.sappenin.com/2009/06/case-for-open-friend-request-protocol.html"&gt;here&lt;/a&gt; for more background on what these terms mean):&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Open&lt;/span&gt;: Communications Relationship ("CR") requests can be send to users with identifiers in unaffiliated domains or federations.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strike&gt;&lt;span style="font-weight: bold;"&gt;Bi-Directional&lt;/span&gt;: &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;OInvite&lt;/span&gt; assumes all CR's are two-way, meaning information can be sent and received by both parties (so long as participants can elect to ignore messages from a particular sender, uni-directional relationships can be simulated in a bi-directional CR).&lt;/strike&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;One-to-One&lt;/span&gt;: &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;OInvite&lt;/span&gt; always involves a CR's between only two participants (a.k.a., cardinality) because this greatly simplifies the spec, yet still supports  one-to-many communications.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;SPAM-Free&lt;/span&gt;: &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;OInvite&lt;/span&gt; provides support for a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;pluggable&lt;/span&gt; mechanism to guard against "first-contact" spam, which is the only type of SPAM available in a white-list type communications environment, such as a social network (in systems like email, this &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;pluggable&lt;/span&gt; model is not sufficient to prevent spam due to the implied "all senders are good" principle underlying the design of SMTP).&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:100%;"&gt;Check out the &lt;a href="http://oinvite.googlecode.com/files/oinvite-core-1_0_3.html"&gt;specification&lt;/a&gt;, and feel free to share your thoughts in the &lt;a href="http://groups.google.com/group/oinvite"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;OInvite&lt;/span&gt; discussion group&lt;/a&gt; or on the &lt;a href="http://groups.google.com/group/diso-project"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;Diso&lt;/span&gt; list&lt;/a&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4330666749808011734-7795964352919774149?l=softwareblog.sappenin.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://softwareblog.sappenin.com/feeds/7795964352919774149/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://softwareblog.sappenin.com/2009/06/announcing-oinvite.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4330666749808011734/posts/default/7795964352919774149?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4330666749808011734/posts/default/7795964352919774149?v=2" /><link rel="alternate" type="text/html" href="http://softwareblog.sappenin.com/2009/06/announcing-oinvite.html" title="Announcing OInvite" /><author><name>David Fuelling</name><uri>https://profiles.google.com/113398800805507648290</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-eofoV5vnRLc/AAAAAAAAAAI/AAAAAAAAFHU/wSyfhYSgGwE/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CUAFRX0zfyp7ImA9WxJXEEg.&quot;"><id>tag:blogger.com,1999:blog-4330666749808011734.post-6773158656822807491</id><published>2009-06-03T08:00:00.000-07:00</published><updated>2009-06-03T11:28:34.387-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-03T11:28:34.387-07:00</app:edited><title>The Case for an Open "Friend Request" Protocol to Enable Communications Nirvana 1.0</title><content type="html">&lt;span style="font-size:100%;"&gt;A while back, I posed a &lt;a href="http://groups.google.com/group/diso-project/browse_thread/thread/b058aa0f444e82a2/"&gt;question to the Diso mailing list&lt;/a&gt; wondering if there was any work being done to enable cross-domain "friend requests" in the context of social networks and other systems that have the notion of "friend lists".&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;span style="font-size:100%;"&gt;There was some interesting discussion surrounding this topic, and I've been meaning to solidify my thoughts around this whole idea.  Given that I love to utilize the &lt;a href="http://xml.resource.org/"&gt;xml2rfc&lt;/a&gt; tool, I decided to just codify my thoughts into a formal specification.  However, I quickly realized that I was creating a lot of new terminology, so this blog post is my attempt to provide some background explanation about the "what" and "how" of cross-domain friend requests, as well as to illuminate my new proposed specification, &lt;a href="http://code.google.com/p/oinvite/"&gt;OInvite&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So here goes...&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;   &lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;span style="font-size:130%;"&gt;A "Friend Request"?&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;First, you might be wondering, "What exactly is a 'friend request', anyway."  Well, for my purposes I will use the following definition:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Friend Request&lt;/span&gt;: &lt;span style="font-style: italic;"&gt;A request from an invitor (the sender of the request) to an invitee (the recipient of the request) to enter into a "communications relationship."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;OK, there's some more new terminology.&lt;br /&gt;&lt;br /&gt;First, the notion of a "communications relationship" is purposefully left quite vague.  Perhaps two users (let's call them "John" &amp;amp; "Beth") simply want to email each other.  That's certainly an obvious form of communication.  However, communications relationships are much bigger than this.  Imagine if John wants to allow Beth to see his photographs on Flickr...that's communication, too, and it generally involves some &lt;span style="font-style: italic; font-weight: bold;"&gt;acceptance &lt;/span&gt;of this communication.&lt;br /&gt;&lt;br /&gt;Thus, a "communications relationship" is the term I invented to describe an agreement between two parties to send and receive information.&lt;br /&gt;&lt;br /&gt;In tandem, an "OInvite" is a&lt;span style="font-style: italic; font-weight: bold;"&gt; request to enter into such a relationship&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;In Facebook terms, this type of thing is generally referred to as a "friend request"; in twitter terms, a "follow me" request; in OAuth terms, it's "I want to share data with you" request, etc.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;      &lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;One-to-One? Uni-Directional? Bi-Directional? &lt;/span&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style="font-size:100%;"&gt;As we travel down the rabbit-hole of "communications relationships", we quickly encounter the notion of &lt;span style="font-weight: bold;"&gt;directionality&lt;/span&gt;.  For example, what if John only wants to share (read: &lt;span style="font-style: italic;"&gt;send&lt;/span&gt;) information with Beth, but doesn't really care to &lt;span style="font-style: italic;"&gt;receive&lt;/span&gt; information from Beth?  Such a relationship would be considered "unidirectional", because information only flows one way.  However, if John wants to both send and receive information to/from Beth, then a bi-directional communications relationship would be required.&lt;br /&gt;&lt;br /&gt;In addition to directionality, "friend requests" might be sent to a single individual, or they might be sent to a group of invitees (a.k.a: recipients).  This is the notion of Invitation &lt;span style="font-weight: bold;"&gt;cardinality&lt;/span&gt;, and quickly adds to the complexity of a communications relationship.  For example, should an invitation be "one-to-one" (an invitation from one user to a different user); one-to-many (an invitation from one user to multiple users); or many-to-many (I'm not even sure if this is possible).&lt;br /&gt;&lt;br /&gt;;)&lt;br /&gt;&lt;/span&gt;  &lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Closed vs. Open Communications Relationships&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Going even deeper, there's one last area of communications relationships that should be considered/defined, and that is the notion of an "open" vs. "closed" communications relationship.&lt;br /&gt;&lt;br /&gt;On today's Web, we are commonly exposed to "closed" communications relationships.  Facebook users can invite other Facebook users to become "friends", thereby allowing communications of various types (messages, photos, activity-streams, etc).  Twitter users can only "follow" other Twitter users; MySpace users are limited to communicating with other MySpace users, and so on.  These are all considered to be "closed" relationships because a Facebook user (for example) cannot easily "becomes friends" with a user from Twitter, without that Twitter user first having a Facebook account with which to interface to Twitter with.&lt;br /&gt;&lt;br /&gt;Conversely, the notion of an "open" communications relationship would allow Facebook users to "friend" users on any other social-network (assuming the two networks could speak the same protocol).  For example, John (on Facebook) might invite Beth (on Orkut) to "share information".&lt;br /&gt;&lt;br /&gt;We don't see this type of thing today for a myriad of reasons.  For one, most social networking sites are closed ecosystems, so they have never bothered to support a "hook" into other social networks (this is beginning to change, e.g., Facebook Apps).&lt;br /&gt;&lt;br /&gt;However, even as social networking websites "open up" their content (and access to that content), they still require an account on the "home" social network.  In the example above, Beth (on Orkut) would need an account on Orkut as well as on Facebook to have John's Facebook data show up in Orkut.&lt;br /&gt;&lt;br /&gt;These "silos" exist for a number of reasons (competitive, economic, technological, etc), but at the core they exist because there is no protocol that will allow Facebook (for example) to control the number of invitations coming from an infinite number of other social networks.  In essence, even if the Internet community could overcome the all the hurdles standing in the way of "open" social networking, there would still be the great white elephant in the room:  SPAM.&lt;br /&gt;&lt;br /&gt;Now, I'm not talking about the kind of spam everyone is familiar with in the email world.  Instead, I'm talking about &lt;span style="font-weight: bold; font-style: italic;"&gt;Invitation Spam&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Social Networks don't allow communication between users until each user has given some sort of "approval" to be communicated with (e.g.,  acceptance of a "friend request").  When a social network provider controls both ends of this interaction, that provider can easily throttle invitations, remove "bad" accounts, and more; thus controlling and eliminating SPAM of any kind.&lt;br /&gt;&lt;br /&gt;However, in a truly open world, the ability to control the "bad guys" goes away, demanding some other mechanism that will both  1.) allow a nearly infinite number of cross-domain social networks to interact with users on the local social network (i.e., a completely open Facebook) and 2.) prevent unwanted invitation SPAM from ruining the entire user experience for legitimate users.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;        &lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Email: Truly (Bad) Open Communications Relationships&lt;/span&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style="font-size:100%;"&gt;O.K., so there's a lot to digest there...but we're not quite done yet.  One last thing to consider before delving into the innards of OInvite is the current SMTP-based email system.&lt;br /&gt;&lt;br /&gt;SMTP provides for cross-domain information sharing, or "open" communications relationships.  In fact, the current email system is perhaps the most successful (and unsuccessful) "open" communications mechanism ever created in the history of the world.  For example, messages from an email address in one domain can be freely sent and received to/from email addresses in another domain.  As we all know, this is a blessing and a curse, enabling unfettered communication on the one hand, while at the same time enabling mass amounts of SPAM on the other.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Email: Communications Nirvana 0.1&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;Despite its shortcomings, email is pretty amazing.  It has enabled an incredible amount of asynchronous communications, productivity (perhaps that's debatable), and more.  However, if there is such a thing as "Communications Nirvana", then email is version 0.1 because it has, despite its open-ness, three significant shortcomings--all of which ultimately have to do with SPAM.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;First&lt;/span&gt;, email lacks the ability to properly authenticate the sender of a message.  I can send an email purporting to be from &lt;span style="font-style: italic;"&gt;john@example.com&lt;/span&gt;, and it's somewhat difficult to verify whether or not "John" was the actual author of the message.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Editor's Note:  The Internet is making progress in this area: SPF, DomainKeys, etc are all positive moves, but they're not universally required nor adopted, making SMTP fundamentally susceptible to this vulnerability.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Second&lt;/span&gt;,  email puts all of the resource burden onto the recipient of a message, allowing senders to trivially send mass amounts of email at virtually no cost.  Bandwidth, CPU resources, and intermediate data storage for email messages is borne by ISP's, and likewise each recipient, making it very inexpensive to send copious quantities of SPAM.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Third&lt;/span&gt;, email has no concept of a "friend list".  Email was designed from the perspective that a particular user should receive all incoming messages.  Today, this principle still holds, unless a message, sender, or domain is specifically blocked by a SPAM filter.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;span style="font-size:130%;"&gt;Social Networks: Communications Nirvana 0.5&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;So, if email is Communications Nirvana 0.1, then social networks are version 0.5.  They solve issues #1, #2, and #3 above; but at the expense of open-ness (e.g., we can't send arbitrary messages to a Facebook account from a system in a different domain).&lt;br /&gt;&lt;br /&gt;Yet, social networks are still pretty incredible.  Virtually no spam; resource burdens borne by the network provider; and the concept of a friend-list that means I'm only receiving information that I elect to receive (for the most part -- I can't say that I really care about Facebook activity updates from 200 'friends', but again -- perhaps the topic of another post).&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;The Future: Communications Nirvana 1.0&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Well, if you're still reading this, then congratulations--I'm now ready to make a point, which is this:  If you buy the argument that social networks are an improvement over email, then the last remaining hurdle to getting to a 1.0 version of Communications Nirvana (in my opinion) is to "open" up social networks.  This is was the &lt;a href="http://diso-project.org/"&gt;Diso project&lt;/a&gt; is working towards, but it seems to me that as long as we sacrifice "open-ness", we'll never it make it to a 1.0 version of communication Nirvana, let alone a version 2.0, 3.0, or 10.0.&lt;br /&gt;&lt;br /&gt;To become "open", we require a mechanism to enable cross-domain invitation requests which will allow us to enter into communications relationships with each other.  In layman's terms, we need an open "Friend Request" mechanism that solves the problem of first-contact SPAM.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;My answer is OInvite--an open protocol to enable cross-domain "friend requests" with a pluggable anti-spam mechanism--and since this blog post is so stinking long, I'm going to discuss the actual protocol in a different post, namely this one.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&amp;lt;Musing&amp;gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Why do we express incredulity when remembering the Internet of ~16 years ago, where for a long time people with an AOL email addresses could not send email to people with a CompuServe addresses?  Today, we suffer this same abuse when it comes to the communications platform du-jour, namely, social networks.&lt;br /&gt;&lt;br /&gt;Imagine 16 years from now when we tell our children how it "used to be":&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dad&lt;/span&gt;: "...in my day, you needed an account at every social network provider in order to be able to communicate with people there..."&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Daughter&lt;/span&gt;: "Seriously?  You're kidding, right?&lt;span style="font-style: italic;"&gt;&lt;/span&gt;"&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dad&lt;/span&gt;: "Yep, if I wanted to talk to you on Facebook, I had to sign-up there.  Then, if I wanted to follow you on Twitter, I had to sign up there..."&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Daughter&lt;/span&gt;: "What's Facebook?"&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Musing&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4330666749808011734-6773158656822807491?l=softwareblog.sappenin.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://softwareblog.sappenin.com/feeds/6773158656822807491/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://softwareblog.sappenin.com/2009/06/case-for-open-friend-request-protocol.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4330666749808011734/posts/default/6773158656822807491?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4330666749808011734/posts/default/6773158656822807491?v=2" /><link rel="alternate" type="text/html" href="http://softwareblog.sappenin.com/2009/06/case-for-open-friend-request-protocol.html" title="The Case for an Open &quot;Friend Request&quot; Protocol to Enable Communications Nirvana 1.0" /><author><name>David Fuelling</name><uri>https://profiles.google.com/113398800805507648290</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-eofoV5vnRLc/AAAAAAAAAAI/AAAAAAAAFHU/wSyfhYSgGwE/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0cARHo9fyp7ImA9WxJQGUs.&quot;"><id>tag:blogger.com,1999:blog-4330666749808011734.post-5798451825064622342</id><published>2009-06-02T10:48:00.000-07:00</published><updated>2009-06-02T10:50:45.467-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-02T10:50:45.467-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="wave" /><title>Google (Tidal) Wave is here...with lots of questions.</title><content type="html">If you haven't yet heard, you will -- Google Wave is here.  It's a pretty amazing thing, but prompts many questions in its wake (pardon the pun). &lt;br /&gt;&lt;br /&gt;This blog entry details just a few of the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;provocative&lt;/span&gt; questions that Wave raises:&lt;br /&gt;&lt;a href="http://storm.alert.sk/blog/2009/06/02/Good-Vibrations"&gt;http://storm.alert.sk/blog/2009/06/02/Good-Vibrations&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4330666749808011734-5798451825064622342?l=softwareblog.sappenin.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://softwareblog.sappenin.com/feeds/5798451825064622342/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://softwareblog.sappenin.com/2009/06/google-tidal-wave-is-herewith-lots-of.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4330666749808011734/posts/default/5798451825064622342?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4330666749808011734/posts/default/5798451825064622342?v=2" /><link rel="alternate" type="text/html" href="http://softwareblog.sappenin.com/2009/06/google-tidal-wave-is-herewith-lots-of.html" title="Google (Tidal) Wave is here...with lots of questions." /><author><name>David Fuelling</name><uri>https://profiles.google.com/113398800805507648290</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-eofoV5vnRLc/AAAAAAAAAAI/AAAAAAAAFHU/wSyfhYSgGwE/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkUHSHY4cCp7ImA9WxJQGUo.&quot;"><id>tag:blogger.com,1999:blog-4330666749808011734.post-5983615093061934631</id><published>2008-12-05T15:31:00.000-08:00</published><updated>2009-06-02T12:17:19.838-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-02T12:17:19.838-07:00</app:edited><title>Great Synopis of the state of Web Metadata Discovery</title><content type="html">Eran Hammer-Lahav &lt;a href="http://groups.google.com/group/metadata-discovery/browse_thread/thread/b4f60d20896ad7c5"&gt;has posted&lt;/a&gt; a great synopsis of the state of Web Metadata Discovery.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update&lt;/span&gt;: Eran has blogged about the Discovery Protocol Stack &lt;a href="http://www.hueniverse.com/hueniverse/2009/03/the-discovery-protocol-stack.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4330666749808011734-5983615093061934631?l=softwareblog.sappenin.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://softwareblog.sappenin.com/feeds/5983615093061934631/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://softwareblog.sappenin.com/2008/12/greay-synopis-of-state-of-web-metadata.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4330666749808011734/posts/default/5983615093061934631?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4330666749808011734/posts/default/5983615093061934631?v=2" /><link rel="alternate" type="text/html" href="http://softwareblog.sappenin.com/2008/12/greay-synopis-of-state-of-web-metadata.html" title="Great Synopis of the state of Web Metadata Discovery" /><author><name>David Fuelling</name><uri>https://profiles.google.com/113398800805507648290</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-eofoV5vnRLc/AAAAAAAAAAI/AAAAAAAAFHU/wSyfhYSgGwE/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C04CR3o_eSp7ImA9WxRUEE4.&quot;"><id>tag:blogger.com,1999:blog-4330666749808011734.post-6454732076504955786</id><published>2008-11-18T09:36:00.000-08:00</published><updated>2008-11-18T10:12:46.441-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-18T10:12:46.441-08:00</app:edited><title>Java-based EAUT libraries released...</title><content type="html">I've finally published a java-based &lt;a href="http://www.eaut.org"&gt;EAUT&lt;/a&gt; library (Apache 2.0 license) that can be used to provide Email Address to URL translation in your java applications.&lt;br /&gt;&lt;br /&gt;Read more about EAUT here: &lt;a href="http://www.eaut.org"&gt;http://www.eaut.org&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Download the java binaries here (Maven2 supported): &lt;a href="http://www.eaut.org/code/"&gt;http://www.eaut.org/code/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;View the the source-code &lt;a href="http://code.google.com/p/eaut/source/browse/#svn/code/java"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4330666749808011734-6454732076504955786?l=softwareblog.sappenin.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://softwareblog.sappenin.com/feeds/6454732076504955786/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://softwareblog.sappenin.com/2008/11/java-based-eaut-libraries-released.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4330666749808011734/posts/default/6454732076504955786?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4330666749808011734/posts/default/6454732076504955786?v=2" /><link rel="alternate" type="text/html" href="http://softwareblog.sappenin.com/2008/11/java-based-eaut-libraries-released.html" title="Java-based EAUT libraries released..." /><author><name>David Fuelling</name><uri>https://profiles.google.com/113398800805507648290</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-eofoV5vnRLc/AAAAAAAAAAI/AAAAAAAAFHU/wSyfhYSgGwE/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DEcGRXk5cCp7ImA9WxRXGUg.&quot;"><id>tag:blogger.com,1999:blog-4330666749808011734.post-6206321042423617454</id><published>2008-10-24T12:55:00.000-07:00</published><updated>2008-10-25T10:33:44.728-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-25T10:33:44.728-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="openid eaut email email-address verification" /><title>Automatic Email-Address Control Verification with EAUT &amp; OpenID</title><content type="html">I recently read about an idea to accelerate OpenID adoption by turning-on RP's to the notion of using OpenID as a means to automatically verify email addresses.&lt;br /&gt;&lt;br /&gt;As one of the author's of the EAUT Specification (&lt;a href="http://eaut.org/specs/1.0/"&gt;EAUT Draft 5&lt;/a&gt;), I have some ideas on how to make this work.  This blog-entry sums up my current thinking, so give it a read, and let me know if it could work, or if I'm just an idiot.  ;)&lt;br /&gt;&lt;br /&gt;Here goes....&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Email Address Verification vs. Validation&lt;/span&gt;&lt;br /&gt;Before diving in, it's important to clarify exactly what I'm talking about here.  Please note that the definitions I'm presenting are completely made up by me, so it's possible you will have seen these terms and phrases elsewhere.  However, for this blog-post, here's what they mean.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Email-address&lt;span style="font-style: italic;"&gt; &lt;span style="font-weight: bold;"&gt;Verification&lt;/span&gt;&lt;/span&gt; merely ensures that the user&lt;span style="font-size:85%;"&gt;[1]&lt;/span&gt; of a particular email address actually controls that email address.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Email Address &lt;span style="font-weight: bold; font-style: italic;"&gt;Validation&lt;/span&gt; determines whether or not an email address works (i.e., does it properly receive email messages, and does the user respond).  Validation can also provide insight into the "quality" of a particular email address, such as "Is this address controlled by a human or a robot?" and "Does a lot of spam come from this address?", etc.&lt;/li&gt;&lt;/ul&gt;To be clear, I'm mostly talking about email-address &lt;span style="font-weight: bold; font-style: italic;"&gt;verification &lt;/span&gt;(of control), and not validation (though once an email address has been verified, some assumptions can be made about its validity -- more on that later).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Why is Verification Important?&lt;/span&gt;&lt;br /&gt;Verification is important for a number of reasons.  Most important, however, is that many public-facing websites (a form of Relying Party, or RP) use email to communicate with their users.  These RP's know &lt;span style="font-style: italic;"&gt;who&lt;/span&gt; each user is (based on the user's identifier), because that's how each user registered with the RP website (I should be more accurate here:  each RP knows, at least, that the user logging into the RP controls the id used to login with -- &lt;span style="font-style: italic;"&gt;who&lt;/span&gt; the actual human doing the login is....well, this is a different question).&lt;br /&gt;&lt;br /&gt;At any rate, since many websites use email to communicate with their user-base, an email address is almost universally collected at registration.  At this stage of the game (directly after the user has supplied an email address), the RP has no way to know that the person controlling the login also controls the email address that was just entered into the RP's system (e.g., a user named Beth might enter the email address 'gwb@whitehouse.gov', which she likely does &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; control.  Most good RP's want to be sure they're sending emails to a person who wants to be receiving those email messages...otherwise it's spam).&lt;br /&gt;&lt;br /&gt;Thus, RP's need to ensure with some high degree of certainty that the person who controls the userId used to login to the RP, also controls the email address that was supplied.&lt;br /&gt;&lt;br /&gt;The most common form of email verification today is to send an email message with a secret code, and ask the user to either click a link (or enter the secret code directly) to verify that the email address is indeed controlled by the user who entered it.  It is important to note that this also tends to semi-validate an email address as well, from the perspective that a successful email address verification also tells the RP that the email address in question can receive email messages (though it says nothing about the quality of the email address).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;The Good Stuff: How to Create Automatic Email-Address Control Verification Service&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;Ok, so how to verify control of an email address?  Follow these simple steps.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span&gt;&lt;span style="font-weight: bold;"&gt;Start with OpenID&lt;/span&gt;.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;span&gt;&lt;br /&gt;OpenID was created for a variety of reasons, but one important reason was to allow Relying Parties (i.e., websites that we login to every day) to assert that the person logging into a particular site with a particular OpenID actually controls that OpenID.  With OpenID, an RP can always be assured that the person logged-in controls a particular OpenID.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span style="font-weight: bold;"&gt;Provide the RP with an Email Address.&lt;br /&gt;&lt;/span&gt;This part is not really defined for this article.  There are lots of ways to do this, including "ask the user" for their email address,  &lt;span style="font-size:100%;"&gt;&lt;a href="http://openid.net/specs/openid-simple-registration-extension-1_0.html"&gt;SREG&lt;/a&gt;&lt;/span&gt;, &lt;a href="http://openid.net/specs/openid-attribute-exchange-1_0-08.html"&gt;Attribute Exchange&lt;/a&gt;, and others like "&lt;a href="http://wiki.openid.net/Debating_Emails_as_1st-Class_or_2nd-Class_Citizens"&gt;make the email address a first-class OpenID&lt;/a&gt;".  Additionally, there's the EAUT protocol, whereby a user can enter only their email address to login to an RP.  The email address is then captured by the RP, transformed into an OpenID URL, and the user logs in via OpenID per usual (click here for an &lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://eaut.org/example/"&gt;example&lt;/a&gt; of this translation in action).  With EAUT, at least, the RP automatically "knows" the email address of the user, because that's what was used to login to the RP in the first place.&lt;br /&gt;&lt;br /&gt;That said, I'll mainly defer on these options for now, since the manner in which an RP gets a user's email address is tangential to verifying the email address, which is the subject of this blog entry.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span style="font-weight: bold;"&gt;Utilize EAUT for Verification.&lt;/span&gt;&lt;br /&gt;The EAUT protocol specifies one method for mapping an email-address to an URL.  The idea was originally proposed as a way utilize email-addresses in the OpenID authentication process.  The rationale for such an idea was (and still is) that it's much more intuitive for a user to enter their email address, as opposed to having the user enter a URL that may be hard to remember, or un-familiar, etc.&lt;br /&gt;&lt;br /&gt;Ironically, EAUT is also applicable to many use-cases outside of plain-old-vanilla OpenID Authentication, as is the case here with Email-address Control Verification.&lt;br /&gt;&lt;br /&gt;It's key to note that EAUT offers only a one-way mapping, from email address to URL.  So, one cannot take a URL and figure out what the email address is.  This is a key privacy control.&lt;br /&gt;&lt;br /&gt;However, if an RP knows both a user's email address and an URL that the user controls (e.g., an OpenID), then EAUT can be used to verify whether or not that email address maps to the specified URL, and OpenID can be used to determine whether or not the two URL's are controlled by the same user (by checking to see if they match -- see more below).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The basic collory is this:  If an email address maps to a URL, and I can show (via OpenID) that I control that URL, then either: 1.) I control the email address, or 2.) the person who controls that email address wants me to also control it, or 3.) the person who controls the email address accidentally mapped it to a URL that I control, thus allowing me to register the email address on an RP site (This latter possibility is unlikely, especially if a mapping service is used).&lt;br /&gt;&lt;br /&gt;So, here's the workflow for automatic email address verification:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;User logs-in to an RP via OpenID (using URLs in this example, but see the "assumptions" section below for XRIs).  Note that EAUT could be used to compliment OpenID, and in any case the end-result is that the RP knows that it's dealing with a person who controls the OpenID in question.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;RP receives the user's email address ("how" this is done is implementation defined - with EAUT-based login, the RP will automatically know the user's email address).&lt;/li&gt;&lt;li&gt;&lt;span&gt;Use EAUT to transform the email address to an Openid.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;If the EAUT-resulting OpenID matches the OpenID that the user logged-in with (or another OpenID that the user has demonstrated control over via OID Auth) then the Email is verified to be under the control of the person who also controls the OpenID.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Otherwise, follow the OpenID auth flow on the EAUT-resulting URL.  If OpenID auth is successful, then the RP now knows that the user in question controls both the OpenID URL resulting from EAUT, and the email address in question is thus assumed to be under this same user's control (otherwise, why would the email address map to a URL under this user's control?).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;If it cannot be demonstrated that the currently logged-in user controls the URL that the email address maps to, then fallback on "send me a secret token" email methodology in wide-use today.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Some Examples&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Example 1: A Valid User Named Beth &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Assumption 1:  Beth can send/receive messages with the email address 'beth@example.com'.&lt;/li&gt;&lt;li&gt;Assumption 2: 'beth@example.com' maps (via EAUT) to the url 'http://beth.example.com'.&lt;/li&gt;&lt;li&gt;Assumption 3: Beth can login to an RP with the OpenID 'http://beth.example.com'.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Outcome&lt;/span&gt;: Beth very likely controls the email address 'beth@example.com'.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Example 2: A Spammer/Attacker&lt;/span&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;Assumption 1:  BadGuyBob &lt;span style="font-weight: bold;"&gt;cannot &lt;/span&gt;send/receive messages with the email address 'steve@apple.com' (i.e., this email address is not under BadGuyBob's control).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Assumption 2: 'steve@apple.com' maps (via EAUT) to the url 'http://steve.apple.com'.&lt;/li&gt;&lt;li&gt;Assumption 3: BadGuyBob &lt;span style="font-weight: bold;"&gt;cannot &lt;/span&gt;login to an RP using the OpenID URL 'http://steve.apple.com'.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Assumption 3: BadGuyBob &lt;span style="font-weight: bold;"&gt;can &lt;/span&gt;login to an RP with the OpenID 'http://badguybob.example.com'.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Outcome&lt;/span&gt;: BadGuyBob logs into the RP, but is unable to assert control over the email address 'steve@apple.com', so the RP does not allow him to enter this email address as his own on this RP.&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Example 3: Should Never Happen&lt;/span&gt;&lt;/span&gt; &lt;ol&gt;&lt;li&gt;Assumption 1:  Dennis &lt;span style="font-weight: bold;"&gt;can&lt;/span&gt; send/receive messages with the email address 'dennis@example.com'.&lt;/li&gt;&lt;li&gt;Assumption 2: 'dennis@example.com' maps (via EAUT) to the url 'http://dennis.example.com'.&lt;/li&gt;&lt;li&gt;Assumption 3: Dennis &lt;span style="font-weight: bold;"&gt;does not&lt;/span&gt; control 'http://bill.microsoft.com'.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Outcome&lt;/span&gt;: Dennis cannot even login to an RP with Bill's OpenID URL, so he will never even get to an email verification step on the RP's site.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;---------------------------------------------------------------------------------------------&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Assumptions&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;The DNS system is not compromised.&lt;/span&gt;  If DNS is compromised, then the mechanism in this proposal is not guaranteed to be accurate.  However, if DNS is compromised, then traditional email verification (i.e., send a message with a secret code and have the user tell the RP what that code is) could be unrealiable as well.  Thus, this proposal is no less-safe than the current system (it's arguably more safe), and is much easier on the end-user (email verification is automatic, instead of the manual process it is today).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;XRI OpenID's are not Discussed Here.  &lt;/span&gt;The OpenID Authentication 2.0 spec allows both XRI's and URL's to be used as OpenID's.  This article does not address how to verify email address control when an XRI is used as an OpenID, but EAUT supports XRI's, so it would seem trivial to use this method with XRI's as well.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;-------------------------------------------------------------------------------------&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[1] &lt;span style="font-weight: bold;"&gt;Owner/User/Controller&lt;/span&gt; is a tricky term, too.  Who owns 'beth@big-web-co.com'?  Does Beth own it, since it's the email address she uses to communicate with?  Does big-web-co own that email address, since it sits in their domain, and is ultimately controlled by them and they're legal department?  For purposes of this article, let's use the term "User", and take it to be Beth for the email address 'beth@big-web-co.com'.  At some level, she both uses and controls this email address (at least until big-web-co tells her she can't).&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4330666749808011734-6206321042423617454?l=softwareblog.sappenin.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://softwareblog.sappenin.com/feeds/6206321042423617454/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://softwareblog.sappenin.com/2008/10/automatic-email-address-control.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4330666749808011734/posts/default/6206321042423617454?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4330666749808011734/posts/default/6206321042423617454?v=2" /><link rel="alternate" type="text/html" href="http://softwareblog.sappenin.com/2008/10/automatic-email-address-control.html" title="Automatic Email-Address Control Verification with EAUT &amp; OpenID" /><author><name>David Fuelling</name><uri>https://profiles.google.com/113398800805507648290</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-eofoV5vnRLc/AAAAAAAAAAI/AAAAAAAAFHU/wSyfhYSgGwE/s512-c/photo.jpg" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;CUIGSXc-cCp7ImA9WxdUEE0.&quot;"><id>tag:blogger.com,1999:blog-4330666749808011734.post-122277926187527049</id><published>2008-07-25T09:30:00.000-07:00</published><updated>2008-07-25T09:32:08.958-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-25T09:32:08.958-07:00</app:edited><title>A Very Thorough OpenID Presentation</title><content type="html">It's about a year old, but it's a great presentation on OpenID by Simon Willison and David Recordan.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.slideshare.net/daveman692/openid-bootcamp-tutorial/"&gt;http://www.slideshare.net/daveman692/openid-bootcamp-tutorial/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4330666749808011734-122277926187527049?l=softwareblog.sappenin.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://softwareblog.sappenin.com/feeds/122277926187527049/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://softwareblog.sappenin.com/2008/07/very-thorough-openid-presentation.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4330666749808011734/posts/default/122277926187527049?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4330666749808011734/posts/default/122277926187527049?v=2" /><link rel="alternate" type="text/html" href="http://softwareblog.sappenin.com/2008/07/very-thorough-openid-presentation.html" title="A Very Thorough OpenID Presentation" /><author><name>David Fuelling</name><uri>https://profiles.google.com/113398800805507648290</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-eofoV5vnRLc/AAAAAAAAAAI/AAAAAAAAFHU/wSyfhYSgGwE/s512-c/photo.jpg" /></author><thr:total>0</thr:total></entry></feed>

