<?xml version="1.0" encoding="UTF-8"?>
<essay xml:lang="en" version="5.0" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:gal="http://norman.walsh.name/rdf/gallery#" xmlns:foaf="http://xmlns.com/foaf/0.1/">
<info>
    
    
    
    
    
    
    
    
    
    
    
<title>Who are you?</title><biblioid class="uri">http://norman.walsh.name/2006/10/20/identity</biblioid>
<volumenum>9</volumenum>
<issuenum>99</issuenum>
<pubdate>2006-10-20T08:29:17-04:00</pubdate>
<date>$Date: 2006-10-20 11:29:15 -0400 (Fri, 20 Oct 2006) $</date>
<author>
      <personname>
<firstname>Norman</firstname>
	<surname>Walsh</surname>
</personname>
    </author>
<copyright>
      <year>2006</year>
      <holder>Norman Walsh</holder>
    </copyright>
<abstract>
<para>Actually, not so much who are you in any absolute sense,
but sometimes I'd like to be able to distinguish you from everyone else.
Using OpenID, for example, instead of yet another user name and password.
</para>
</abstract>
<dc:subject rdf:resource="http://norman.walsh.name/knows/taxonomy#TheWeb"/>
</info>

<epigraph>
<attribution>
      <personname>
<firstname>George</firstname>
	<surname>McGovern</surname>
</personname>
    </attribution>
<para xml:id="p2">The whole campaign was a tragic case of mistaken identity.</para>
</epigraph>

<para xml:id="p1">I have no particular expertise in security or identity
issues, for that you want someone like
<link xlink:href="http://www.xmlgrrl.com/blog/">
      <personname>
	<firstname>Eve</firstname>
<surname role="suppress">Maler</surname>
      </personname>
    </link>. I thought I'd
say that right up front.</para>

<para xml:id="p3">Nevertheless, I build web applications and sometimes I want those
applications to be able to distinguish one user from another. When I built
<link xlink:href="http://norman.walsh.name/2005/02/16/witw-part-1">WITW</link>,
I employed what I expect is the most common mechanism for this purpose: user names and
passwords. There are two problems
(<link xlink:href="http://www.w3.org/2001/tag/doc/passwordsInTheClear-52">three</link>
actually) with user names and passwords: convenience and security.</para>

<para xml:id="p4">If every web application that wants to distinguish your identity
from the identity of others asks you to provide a user name and
password, you have two choices: create a whole raft of user
name/password pairs, inconvenient for most people, or use the same
user name/password pair for more than one application. Reuse exposes you to
greater risk: it means that if any one of the applications you use is
compromised, other applications are potentially compromised as well.</para>

<para xml:id="p5">When I built the
<link xlink:href="http://norman.walsh.name/2006/09/13/photodata">photodata.org
application</link>, I decided to try something else:
<wikipedia>OpenID</wikipedia>. The promise of OpenID is the ability to broker
your identity through a common server. That common server can authenticate your
identity to any number of web applications without requiring you to reveal any
user name or password information to the individual applications. From
the other side of the fence, to the application, user identity becomes
a verified URI instead of a verified user name. I already expect to
use URIs to identify things, so that's a win too. </para>

<para xml:id="p6">I'm currently using Verisign's <link xlink:href="https://pip.verisignlabs.com/">personal identity
server</link>, but there are plenty of other OpenID servers out there.
You can even run your own server, if you want. I'm giving Verisign a little
free advertising here to reward them for outstanding service. The
OpenID login stuff involves several redirects and some session caching
and is a little complicated to setup. I wanted a
<wikipedia page="Ruby_%28programming_language%29">Ruby</wikipedia> implementation that
<emphasis>wasn't</emphasis> designed to be part of a
<wikipedia page="Ruby_on_Rails">Rails</wikipedia> framework, so I
wound up having to hack my own from one of the example scripts. I got
it wrong a bunch of times before I got it right which wasn't too
surprising. What was surprising was that the technical director of the
PiP program <emphasis>noticed</emphasis> my failed attempts in their
server logs and <emphasis>contacted me</emphasis> to help. I thought
that was pretty impressive.</para>

<para xml:id="p7">In case you too are looking for a non-Rails implementation, feel free to
start with <link xlink:href="examples/login">my efforts</link>. You can also
take it for a
<link xlink:href="/cgi-bin/login">test drive</link>, if you'd like.</para>

<para xml:id="p8">So far, my experience with OpenID has been all positive. I had
no trouble explaining it to several early testers of <link xlink:href="http://photodata.org/">photodata.org</link> and they had
no trouble going out and getting their own identities. I can tell users
apart and I don't have to manage user names and passwords (I don't have
to assign them, I don't have to store them, I don't have to help people
who forget them, I don't have to worry about someone stealing them, etc.).
</para>

<para xml:id="p9">Next time you build a web application that needs a login, consider OpenID.
</para>

</essay>

