<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
>

<channel>
	<title>Will Norris &#187; hcard</title>
	<atom:link href="http://willnorris.com/tag/hcard/feed" rel="self" type="application/rss+xml" />
	<link>http://willnorris.com</link>
	<description>there&#039;s more to life than this</description>
	<lastBuildDate>Sun, 08 Jan 2012 02:08:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4-alpha-19719</generator>
<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
		<item>
		<title>try { reuse; } catch (Ex) { reinvent; }</title>
		<link>http://willnorris.com/2007/11/try-reuse-catch-ex-reinvent</link>
		<comments>http://willnorris.com/2007/11/try-reuse-catch-ex-reinvent#comments</comments>
		<pubDate>Tue, 06 Nov 2007 03:49:45 +0000</pubDate>
		<dc:creator>Will Norris</dc:creator>
				<category><![CDATA[identity]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[hcard]]></category>
		<category><![CDATA[ldap]]></category>
		<category><![CDATA[microformats]]></category>
		<category><![CDATA[openid]]></category>
		<category><![CDATA[openid-ax]]></category>
		<category><![CDATA[saml]]></category>
		<category><![CDATA[shibboleth]]></category>

		<guid isPermaLink="false">http://willnorris.com/2007/11/try-reuse-catch-ex-reinvent</guid>
		<description><![CDATA[Earlier today, I wrote about the limitations of hCard primarily in regards to private data. After talking with Chris briefly and then reading Tantek&#8217;s thoughts on the topic, it clicked with me. I wouldn&#8217;t normally make two posts so close together about such similar topics, but I realize now these really are two different topics. [...]]]></description>
			<content:encoded><![CDATA[<p>Earlier today, I wrote about the <a href="http://willnorris.com/2007/11/hcard-is-not-a-provisioning-engine-for-private-data">limitations of hCard</a> primarily in regards to private data.  After talking with <a href="http://factoryjoe.com/blog/2007/11/01/hcard-for-openid-simple-registration-and-attribute-exchange/">Chris</a> briefly and then reading <a href="http://tantek.com/log/2007/11.html#d02t2318">Tantek&#8217;s thoughts</a> on the topic, it clicked with me.  I wouldn&#8217;t normally make two posts so close together about such similar topics, but I realize now these really are two different topics.  The concerns about hCard and privacy are very real and certainly worth consideration, but what Chris was really getting at was attribute naming.</p>

<p><span id="more-208"></span></p>

<h3>OpenID attributes</h3>

<p>The OpenID <a href="http://openid.net/specs/openid-simple-registration-extension-1_0.html">Simple Registration Extension</a> was designed, much like OpenID itself, to address a very specific use case &#8212; providing the most common data requested when registering at a new website (things like name, email, gender, etc).  It defines a fixed list of nine attributes that can be provided, and it works well for what it does, but it&#8217;s a bit rigid when one tries to do anything more with it.  Even before the final draft of the SREG extension had been published, work was already being done on a more flexible extension for <a href="http://openid.net/specs/openid-attribute-exchange-1_0-07.html">attribute exchange</a>.  This new extension defined only a mechanism for transferring attributes, but didn&#8217;t prescribe a fixed list of attributes.  But in order to be at all useful, two parties must be assured that they are both talking about the same attribute.  Therefore an attribute registry was established at <a href="http://www.axschema.org/">axschema.org</a> and a number of attributes (formatted as URLs) have <a href="http://www.axschema.org/types/">already been defined</a> which will likely be useful in common scenarios.</p>

<h3>Attributes in Higher Education</h3>

<p>Developed in the early 90s at the University of Michigan, LDAP quickly grew favor with higher education institutions to replace heavier-weight directory protocols.  A number of LDAP object classes were defined to provide attributes deemed useful in certain contexts, for example <a href="http://www.faqs.org/rfcs/rfc2798.html">rfc2798</a> defined <code>inetOrgPerson</code> which addressed the needs of &#8220;Internet and Intranet directory service deployments&#8221;.  Higher Education had its own unique needs, so in 2001 Internet2 published the first version of the <a href="http://www.educause.edu/eduperson/">eduPerson Object Class</a>.  If (and only if) institutions required additional attributes beyond those provided by some already published object class, it was common practice to define a local object class to house those attributes.</p>

<p>Within a few years, the SAML specification was published and <a href="http://shibboleth.internet2.edu/">Shibboleth</a> began finding its way onto many college campuses.  Though not required by SAML, Shibboleth recommended the use of URIs for SAML attribute names, and subsequently established a <a href="http://www.google.com/search?q=cache:http://middleware.internet2.edu/dir/docs/internet2-mace-dir-saml-attributes-200604.pdf">collection of URN values</a> to represent common LDAP attributes, including those defined in the eduPerson object class.  As before, if campuses needed to include additional attributes in a SAML assertion, they were defined within a local namespace.  Today, it is very common to see a mix of attributes at USC including those defined by Internet2:</p>

<ul>
<li><code>urn:mace:dir:attribute-def:displayName</code></li>
<li><code>urn:mace:dir:attribute-def:eduPersonAffiliation</code></li>
</ul>

<p>as well as those we have defined locally at USC:</p>

<ul>
<li><code>urn:mace:usc.edu:gds:attribute-def:uscUSCID</code></li>
<li><code>urn:mace:usc.edu:gds:attribute-def:uscStudentDegreeProgram</code></li>
</ul>

<h3>Applying Precedence</h3>

<p>No one is pretending that the fixed set of attributes defined in <a href="http://www.faqs.org/rfcs/rfc2426.html">rfc2426</a> is the definitive list of attributes that could possibly be useful in OpenID, no more than eduPerson was the exhaustive list of attributes for every university that used it.  All that is being questioned is why did Attribute Exchange redefine all that was already established in vCard?  I would strongly support Tantek&#8217;s third proposal of hosting the official hCard XMDP profile at <code>http://microformats.org/profile/hcard</code>, so that AX can leverage the hCard specification while maintaining URL based attribute names.  And given that it appears as though <a href="http://willnorris.com/openid-support">no one is currently supporting AX</a>, <strong>now</strong> is the time to make this change.</p>

<p>(For the non-technical, the title roughly reads &#8220;First try to reuse.  Only if that doesn&#8217;t work, then reinvent.&#8221;)</p>
]]></content:encoded>
			<wfw:commentRss>http://willnorris.com/2007/11/try-reuse-catch-ex-reinvent/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>hCard is not a provisioning engine (for private data)</title>
		<link>http://willnorris.com/2007/11/hcard-is-not-a-provisioning-engine-for-private-data</link>
		<comments>http://willnorris.com/2007/11/hcard-is-not-a-provisioning-engine-for-private-data#comments</comments>
		<pubDate>Mon, 05 Nov 2007 23:29:53 +0000</pubDate>
		<dc:creator>Will Norris</dc:creator>
				<category><![CDATA[identity]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[hcard]]></category>
		<category><![CDATA[microformats]]></category>
		<category><![CDATA[openid]]></category>
		<category><![CDATA[openid-ax]]></category>
		<category><![CDATA[saml]]></category>
		<category><![CDATA[shibboleth]]></category>

		<guid isPermaLink="false">http://willnorris.com/2007/11/hcard-is-not-a-provisioning-engine-for-private-data</guid>
		<description><![CDATA[Last week I wrote about how hCard is much more appropriate than OpenID for the provisioning use-case and Chris continued that discussion, questioning why we need SREG and Attribute Exchange when hCard works just fine. So the question is, when OpenID is clearly a player in the future and part of that promise is about [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I wrote about how hCard is much more appropriate than OpenID for <a href="http://willnorris.com/2007/10/openid-is-not-a-provisioning-engine">the provisioning use-case</a> and Chris <a href="http://factoryjoe.com/blog/2007/11/01/hcard-for-openid-simple-registration-and-attribute-exchange/">continued that discussion</a>, questioning why we need SREG and Attribute Exchange when hCard works just fine.</p>

<blockquote>
  <p>So the question is, when OpenID is clearly a player in the future and part of that promise is about 
  making things easier, more consistent and more citizen-centric, why would we go and introduce a <strong>whole 
  new format</strong> for representing person-detail-data when a perfectly good one already exists and is so 
  widely supported?</p>
</blockquote>

<p>While I certainly agree with Chris that hCard has a role to play in the new world of online identity, I don&#8217;t want SREG or AX to be dismissed too quickly.  I don&#8217;t believe he was suggesting that hCard would replace SREG/AX in all use cases, but I want to labor this point just a little bit so that others are not confused.</p>

<p><span id="more-207"></span></p>

<p>There is one huge benefit to SREG and AX that hCard doesn&#8217;t (and by it&#8217;s nature, can&#8217;t) address&#8230; releasing different attributes to different relying parties.  This can take a number of forms.  The one most commonly supported in OpenID providers today is the idea of personas - a complete set of attribute values that reflect your online identity within a particular context.  You may have a &#8220;work&#8221; persona that includes your formal name, work email address and website, etc.  Separately, you may have a &#8220;personal&#8221; persona that has some informal nickname along with a personal email address, website. etc.  Separate still, you may have an &#8220;anonymous&#8221; persona that includes little (or fabricated) data about yourself.  Depending on which relying party you are authenticating to, you may use a particular persona.</p>

<p>Varying this slightly, one can imagine a use case that will be become increasingly important as OpenID continues to expand.  hCard is suitable for public attributes I want to post for the world to see, but what about not-so-public data?  It will likely be some time before we start transferring credit card numbers over OpenID+AX, but I have no doubt it will happen eventually (as nervous as that makes even me).  But even before then, I can imagine a host of data that I may need or want to provide to a relying party, but do not want to publish in my public hCard.  As I included in my <a href="http://willnorris.com/2007/03/openid-provider-wish-list">OpenID provider wish-list</a>, OpenID providers will need to provide the tools to manage the policies controlling this release of data, a feature that has the potential to really differentiate one provider from the rest of the pack.  This fine-grained level of control has always been a core requirement for the <a href="http://shibboleth.internet2.edu/">Shibboleth</a> SAML Identity provider, and I would argue that the (currently beta) Shibboleth 2.0 IdP has one of the most powerful and flexible (and admittedly, verbose) <a href="https://spaces.internet2.edu/display/SHIB2/AFPAttributeFilterPolicy">filtering engines</a> of its kind anywhere.</p>

<p>So there are really two issues at play in Chris&#8217;s question, that of the data format and separately, the mechanism for conveying that data.  I haven&#8217;t really addressed the issue of the data format, because I agree with Chris in principal at least.  His <a href="http://microformats.org/wiki/attribute-exchange">comparison table</a> of attribute names shows a very clear overlap between the different methods, and perhaps it would be useful to work to consolidate some of that.  But the mechanisms for making that data available address different, and equally valid, use cases and each play a role in making all of this stuff work.</p>
]]></content:encoded>
			<wfw:commentRss>http://willnorris.com/2007/11/hcard-is-not-a-provisioning-engine-for-private-data/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>OpenID is not a provisioning engine</title>
		<link>http://willnorris.com/2007/10/openid-is-not-a-provisioning-engine</link>
		<comments>http://willnorris.com/2007/10/openid-is-not-a-provisioning-engine#comments</comments>
		<pubDate>Tue, 30 Oct 2007 08:11:46 +0000</pubDate>
		<dc:creator>Will Norris</dc:creator>
				<category><![CDATA[identity]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[hcard]]></category>
		<category><![CDATA[ldap]]></category>
		<category><![CDATA[microformats]]></category>
		<category><![CDATA[openid]]></category>
		<category><![CDATA[openid-ax]]></category>
		<category><![CDATA[provisioning]]></category>
		<category><![CDATA[saml]]></category>
		<category><![CDATA[shibboleth]]></category>

		<guid isPermaLink="false">http://willnorris.com/2007/10/openid-is-not-a-provisioning-engine</guid>
		<description><![CDATA[In talking about the future possibilities of OpenID 2.0 and the Attribute Exchange extension, James Henstridge mentions, Imagine being able to update your shipping address in one place when you move house and having all the online retailers you use receive the updated address immediately. Or changing your email address and having all the bugzilla [...]]]></description>
			<content:encoded><![CDATA[<p>In talking about the future possibilities of OpenID 2.0 and the <a href="http://openid.net/specs/openid-attribute-exchange-1_0-07.html">Attribute Exchange</a> extension, <a href="http://blogs.gnome.org/jamesh/2007/10/23/openid-20/">James Henstridge</a> mentions,</p>

<blockquote>
  <p>Imagine being able to update your shipping address in one place when you 
  move house and having all the online retailers you use receive the updated 
  address immediately. Or changing your email address and having all the 
  bugzilla instances you use pick up the new address instantly (perhaps 
  requiring you to verify the new address first, of course).</p>
</blockquote>

<p>While I agree this kind of experience would be very neat, it is not a use case for OpenID nor the Attribute Exchange extension.<span id="more-206"></span>  I am not surprised to hear someone say this, as this is a common point of confusion here at USC in regards to <a href="http://shibboleth.internet2.edu/">Shibboleth</a>.  When it comes to attribute delivery, both OpenID and SAML are primarily designed to provide data <em>at the time of login</em> <sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>.  So this means that if a user never logs in to your service, you never get any data about them.  And if a user&#8217;s data changes since their last login, you don&#8217;t find out about until they <em>next</em> login, since that is the only time attribute delivery occurs.  It is also important to note that you are typically only getting data about the user that is logging in, no one else.  You can&#8217;t treat an OpenID provider as a lookup service to get data about some other user.</p>

<p>So how does a relying party update their data without waiting on the user to login again?  One option is to have the data pushed to each service using some kind of messaging hub.  There is a whole market for enterprise messaging complete with its own set of acronyms like <a href="http://en.wikipedia.org/wiki/Enterprise_service_bus">ESB</a>, <a href="http://en.wikipedia.org/wiki/Enterprise_messaging_system">EMS</a>, <a href="http://en.wikipedia.org/wiki/Enterprise_application_integration">EAI</a>, and many many more.  I&#8217;m particularly interested in a project developed by a colleague of mine in Sweden called <a href="http://devel.it.su.se/pub/jsp/polopoly.jsp?d=1227">JEvent</a>, which uses the XMPP <a href="http://www.xmpp.org/extensions/xep-0060.html">Publish-Subscribe</a> protocol to deliver these types of messages using a standard XMPP server in the middle.  Your Jabber messaging window becomes your console. :)</p>

<p>The other method of getting at user data is for each relying party to pull the data.  This is the model we use at USC, where that mechanism for pulling data is LDAP.  A number of services on campus use LDAP to address both use cases mentioned above &#8212; refreshing data about users, as well as looking up data about someone other than the user who logged in.  So what&#8217;s the equivalent in the decentralized OpenID world?  Well honestly there isn&#8217;t anything just yet but we have a good foundation.  Thanks to <a href="http://microformats.org/">microformats</a> like <a href="http://microformats.org/wiki/hcard">hCard</a>, you can publish your data in a standard, machine-parsable format that your online retailers or bugzilla instances could watch periodically.  When you update your hCard on your homepage they can respond in kind, perhaps by immediately updating their databases or sending you a confirmation email of the change.  Right now all of this data is decentralized, published on personal blogs and webpages.  I don&#8217;t argue that this data should certainly be under individual control, but it puts an awful large burden on the individual service providers to do all that spidering.  I don&#8217;t know what the answer is, but I&#8217;ve been thinking about an hCard crawler with an LDAP front-end as a simple place to start.  Configure Apple AddressBook or Outlook to use LDAP, and you&#8217;re off and running.</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:1">
<p>SAML is actually a little more flexible here, but it&#8217;s not the common use case&#160;<a href="#fnref:1" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://willnorris.com/2007/10/openid-is-not-a-provisioning-engine/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

