<?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:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
>

<channel>
	<title>willnorris.com &#187; identity</title>
	<atom:link href="http://willnorris.com/category/identity/feed" rel="self" type="application/rss+xml" />
	<link>http://willnorris.com</link>
	<description>managing identity</description>
	<pubDate>Sun, 05 Oct 2008 03:51:15 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
		<item>
		<title>WordPress OpenID v3.0</title>
		<link>http://willnorris.com/2008/10/wordpress-openid-v3</link>
		<comments>http://willnorris.com/2008/10/wordpress-openid-v3#comments</comments>
		<pubDate>Thu, 02 Oct 2008 01:44:29 +0000</pubDate>
		<dc:creator>Will Norris</dc:creator>
		
		<category><![CDATA[identity]]></category>

		<category><![CDATA[technology]]></category>

		<category><![CDATA[openid]]></category>

		<category><![CDATA[wp-openid]]></category>

		<guid isPermaLink="false">http://willnorris.com/?p=337</guid>
		<description><![CDATA[I&#8217;m happy to announce that version 3.0 of the WordPress OpenID plugin is now available.  As previously mentioned, there are a lot of new features in this release:


OpenID Provider - Specific user roles can be given the capability of using the built-in OpenID provider, turning their author posts URL into a valid OpenID which [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m happy to announce that version 3.0 of the WordPress OpenID plugin is <a href="http://wordpress.org/extend/plugins/openid/">now available</a>.  As <a href="http://willnorris.com/2008/09/the-next-steps-with-wp-openid">previously mentioned</a>, there are a lot of new features in this release:</p>

<ul>
<li><strong>OpenID Provider</strong> - Specific user roles can be given the capability of using the built-in OpenID provider, turning their author posts URL into a valid OpenID which can be used to login to other sites.  This includes support for OpenID 1.0 and 2.0 as well as Simple Registration 1.0, with hooks to add other OpenID extensions.</li>
<li><strong>OpenID Delegation</strong> - Users authorized to use the built-in provider can optionally choose to delegate their OpenID to another provider instead.</li>
<li><strong>EAUT Mapper</strong> - Support for the draft <a href="http://eaut.org">Email Address to URL Transformation</a> protocol.  If you use an email address at the domain of your WordPress blog, you can now use use that email address to login wherever EAUT is supported.</li>
<li><strong>Extensibility</strong> - the plugin now has a number of public functions and hooks that other plugins can use to integrate with or extend the OpenID plugin.  These are all <a href="http://wiki.diso-project.org/WordPress-OpenID">documented here</a>.</li>
</ul>

<p>It&#8217;s worth mentioning that pretty much all of the new features require that you also have the <a href="http://wordpress.org/extend/plugins/xrds-simple/">XRDS-Simple plugin</a> installed.  There are also a number of other changes in regards to simplifying and stabilizing the plugin, than can be read about <a href="http://willnorris.com/2008/09/wp-openid-faster-stronger-better">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://willnorris.com/2008/10/wordpress-openid-v3/feed</wfw:commentRss>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Providing and Delegating OpenIDs</title>
		<link>http://willnorris.com/2008/09/providing-and-delegating-openids</link>
		<comments>http://willnorris.com/2008/09/providing-and-delegating-openids#comments</comments>
		<pubDate>Tue, 16 Sep 2008 21:18:00 +0000</pubDate>
		<dc:creator>Will Norris</dc:creator>
		
		<category><![CDATA[identity]]></category>

		<category><![CDATA[technology]]></category>

		<category><![CDATA[openid]]></category>

		<category><![CDATA[wordpress]]></category>

		<category><![CDATA[wp-openid]]></category>

		<guid isPermaLink="false">http://willnorris.com/?p=270</guid>
		<description><![CDATA[The next major release of wp-openid includes a built-in OpenID provider and delegation engine.  This will certainly be the most exciting feature of this release for most people, so let me explain a bit how it works.  Each authorized user on the WordPress blog will have an OpenID at the author posts URL [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://willnorris.com/2008/09/the-next-steps-with-wp-openid">next major release</a> of wp-openid includes a built-in OpenID provider and delegation engine.  This will certainly be the most exciting feature of this release for most people, so let me explain a bit how it works.  Each authorized user on the WordPress blog will have an OpenID at the author posts URL (ie. http://example.com/author/admin).  Authorization to use the OpenID provider is controlled based on user roles and is managed in the main OpenID settings page.  Each user can choose between one of three options for their OpenID:</p>

<ul>
<li>Don&#8217;t use OpenID at all</li>
<li>Use the local OpenID provider built in to the plugin</li>
<li>Delegate to another OpenID</li>
</ul>

<p>If a the local OpenID provider is used, it also supports transmitting sreg attributes pulled from the user&#8217;s WordPress profile and the DiSo Profiles plugin, if it&#8217;s installed.  The user can update this data before releasing it to the relying party, but those changes aren&#8217;t currently stored.  In addition, trust decisions are recorded and stored for the user, and can be modified from their config page at any time.</p>

<p>If a user chooses to delegate to another OpenID, they need only provide the delegate OpenID itself.  All server configuration and supported extensions from that provider are discovered and published in the local XRDS document.  Of course this data will have to be cached and probably updated on some interval, but it makes setting up delegation a breeze.</p>

<h3>Server Modes</h3>

<p>Remember that every user&#8217;s OpenID is their author posts URL.  So what about the home URL for the blog itself?  Well, the OpenID server can operate in two basic modes: <strong>multi-user</strong> and <strong>blog-owner</strong>&#8230; perhaps not the best names, but they&#8217;ll work for now.  </p>

<p>In multi-user, the default configuration, the server supports a feature in OpenID 2.0 called <em>OpenID Provider driven identifier selection</em>.  What this means is that ANY user on that blog can enter the home URL as their OpenID, and the OpenID provider itself will make sure that the correct identifier is returned to the relying party.  The final identifier will still be something like <em>http://example.com/author/admin/</em>, but the user only needs to enter <em>example.com</em> at a relying party.  If you&#8217;ve used ever used Yahoo&#8217;s OpenID provider, then you&#8217;ve probably seen how this works.</p>

<p>I suspect the more common mode will be blog-owner, which is appropriate for personal blogs.  Even if there are multiple users in the system, the blog is basically owned by one individual and it makes sense for that individual to use the blog home URL as their OpenID.  This mode is activated by selecting a &#8220;Blog Owner&#8221; on the main plugin configuration page.  Once set, this user&#8217;s personal OpenID configuration (whether turned off, using the local provider, or delegated to another OpenID) will be used at the blog home URL.  Other user&#8217;s on the blog could still use their OpenIDs, but they would need to type in the full URL each time&#8230; they just lose the convenience of being able to use the blog home URL.</p>

<p>For security, once a blog owner is set, no other user can update the setting.  The blog owner can set someone else as the new blog owner (a push mechanism), but no-one can take ownership away (a pull mechanism).  Additionally, if a multi-user blog wants to ensure no-one is ever set as the blog owner, they can add the following to their wp-config.php file:</p>

<pre><code>define("OPENID_DISALLOW_OWNER", 1);
</code></pre>

<h3>What&#8217;s left to do</h3>

<p>The main outstanding work to be done before release is the user interface.  You&#8217;ll notice that the user&#8217;s configuration screen (where they manage their external OpenIDs, OpenID Provider preference, and Trusted Sites) is a bit confusing if you&#8217;re not to familiar with OpenID.  The current layout was done simply for convenience while developing the OpenID Provider, and will be overhauled to some degree before the release.</p>

<p>I&#8217;m also not too sure about compatibility with older versions of PHP and WordPress.  I&#8217;ve been developing using PHP 5.2.6, MySQL 5.0.51, and WordPress 2.6.1.  I do intend to remain as backwards compatible on these as possible (within reason), but make no guarantees for the current development code.  I&#8217;ll also be working to make everything compatible with WordPressMU and BuddyPress.  For now, I just wanted to get the code out there, and get people playing with it a little bit.</p>
]]></content:encoded>
			<wfw:commentRss>http://willnorris.com/2008/09/providing-and-delegating-openids/feed</wfw:commentRss>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>wp-openid - faster, stronger, better</title>
		<link>http://willnorris.com/2008/09/wp-openid-faster-stronger-better</link>
		<comments>http://willnorris.com/2008/09/wp-openid-faster-stronger-better#comments</comments>
		<pubDate>Tue, 16 Sep 2008 21:17:48 +0000</pubDate>
		<dc:creator>Will Norris</dc:creator>
		
		<category><![CDATA[identity]]></category>

		<category><![CDATA[technology]]></category>

		<category><![CDATA[openid]]></category>

		<category><![CDATA[wordpress]]></category>

		<category><![CDATA[wp-openid]]></category>

		<guid isPermaLink="false">http://willnorris.com/?p=268</guid>
		<description><![CDATA[One of the primary focuses for this next major release of wp-openid is stability.  While most people have had great success with the plugin, there are a fair number that seem to have all kinds of strange problems, ranging from conflicts with other plugins, data corruption, library issues, etc.  In order to reach [...]]]></description>
			<content:encoded><![CDATA[<p>One of the primary focuses for this <a href="http://willnorris.com/2008/09/the-next-steps-with-wp-openid">next major release</a> of wp-openid is stability.  While most people have had great success with the plugin, there are a fair number that seem to have all kinds of strange problems, ranging from conflicts with other plugins, data corruption, library issues, etc.  In order to reach the level of adoption I&#8217;d love to see, we have to make this plugin as easy to install and run as WordPress itself.  This is certainly no easy task, but we&#8217;ve come a very long way.  To this end, you&#8217;ll find the following changes:</p>

<h3>Simplified Database Structure</h3>

<p>Version 1.0 of wp-openid added four new database tables and overloaded one of the comment table fields in a weird way.  Version 2.0 required only three of those four tables and added one column to the comment table to eliminate the overloaded field.  The current development version doesn&#8217;t add any columns or overload fields of existing tables, and adds only one new table of its own, which I&#8217;m still hoping to eliminate.</p>

<p>The two removed tables were used to store OpenID associations and nonces, both of which are temporary data necessary to make OpenID security actually work.  Instead of using these tables, I&#8217;ve opted to use an updated version of the OpenID store used in Simon Willison&#8217;s <a href="http://wordpress.org/extend/plugins/mu-open-id/">mu-open-id</a> plugin which uses the WordPress options table to store this data.  I&#8217;ve updated his store to use the latest php-openid APIs as well as to reduce the potential for race conditions.</p>

<p>I&#8217;ve removed the column from the comments table that was tracking which comments were left using OpenIDs, and am instead storing this in the postmeta table for the post the comment is associated with.  It would certainly be preferable to have a commentmeta table, but I like this better than the previous solution.</p>

<p>The one remaining table is the identity table which tracks the identity URLs of each user.  I would like to store this in the usermeta table, but because <a href="http://trac.wordpress.org/ticket/7540">it requires unique keys</a> there&#8217;s just not a real clean way to do this and keep the plugin scalable to support large deployments.  If this is fixed in 2.7, we could theoretically eliminate any custom database stuff in the plugin, which I&#8217;d absolutely love.</p>

<h3>Removed PEAR_LOG</h3>

<p>For the time being I&#8217;ve removed PEAR&#95;LOG and am simply using error&#95;log() for what logging still remains.  The problem is that most people weren&#8217;t taking advantage of the logs anyway, so they were just taking up space.  I&#8217;ll likely look at making use of the WP&#95;DEBUG constant to allow more verbose logging when it&#8217;s desired.  For now this just simplifies things a bit, and eliminates at least one case of library conflict that was reported.</p>

<h3>Code Refactoring</h3>

<p>Really?  More refactoring?  Didn&#8217;t I just do a lot of this in the last point release?  Well yes, but more was needed&#8230; MUCH more.  Previously, code was roughly divided based on the MVC (model, view, controller) model into store.php, interface.php, and logic.php, respectively.  That worked for a while, but got to be pretty confusing as those individual files became a bit unmanageable.  Instead, things are now broken into more logical segments&#8230; comments, admin panel, logging in through wp-login.php, etc.  This seems to be a lot easier to manage and more importantly, easier to extend.</p>

<h3>More Hooks</h3>

<p>I haven&#8217;t sat down to document them all yet, but I&#8217;m adding in more hooks for other plugins to add functionality.  Want to pull profile data from FOAF instead of sreg?  No problem, now you have a hook you can implement.  This makes everything in the plugin much more lightweight and &#8220;loosely joined&#8221; which is always good.  All of the existing non-core OpenID functionality (like SREG) is currently using these hooks.</p>

<h3>Bug Fixes</h3>

<p>Though I&#8217;m not always good about replying, I generally do monitor <a href="http://wordpress.org/tags/openid">the conversations</a> on the WordPress support forums.  I will try and put together a more exhaustive list of what bugs have been addressed, but I will simply say for now that most of the major bugs people have reported there should be absent from the current development branch.</p>
]]></content:encoded>
			<wfw:commentRss>http://willnorris.com/2008/09/wp-openid-faster-stronger-better/feed</wfw:commentRss>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>The Next Steps with wp-openid</title>
		<link>http://willnorris.com/2008/09/the-next-steps-with-wp-openid</link>
		<comments>http://willnorris.com/2008/09/the-next-steps-with-wp-openid#comments</comments>
		<pubDate>Tue, 16 Sep 2008 21:17:21 +0000</pubDate>
		<dc:creator>Will Norris</dc:creator>
		
		<category><![CDATA[identity]]></category>

		<category><![CDATA[technology]]></category>

		<category><![CDATA[openid]]></category>

		<category><![CDATA[wordpress]]></category>

		<category><![CDATA[wp-openid]]></category>

		<category><![CDATA[xrds-simple]]></category>

		<guid isPermaLink="false">http://willnorris.com/?p=265</guid>
		<description><![CDATA[I&#8217;m really excited about what&#8217;s been happening with the WordPress OpenID plugin the last couple of weeks.  When it&#8217;s ready to ship, I&#8217;m sure I&#8217;ll do some really deep contemplative post about &#8220;how far we&#8217;ve come&#8221; or something like that.  In the meantime however, I think I&#8217;ve got something that is mostly feature [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m really excited about what&#8217;s been happening with the WordPress OpenID plugin the last couple of weeks.  When it&#8217;s ready to ship, I&#8217;m sure I&#8217;ll do some really deep contemplative post about &#8220;how far we&#8217;ve come&#8221; or something like that.  In the meantime however, I think I&#8217;ve got something that is mostly feature complete and more or less ready for some &#8220;alpha&#8221; level testing.  There&#8217;s a lot that will be new in this release, which I&#8217;m going to try and cover in my next couple of posts.  That should give people more manageable chunks to look at, test, and comment on.  If you&#8217;ve got a test WordPress instance laying around and like playing with unreleased code, please dive right in.</p>

<h3>Here Be Dragons!</h3>

<p>Let me say first and foremost, don&#8217;t use this on a production blog.  I always say that when I blog about unreleased code, but this time it&#8217;s much more important.  There are major database changes in this version&#8230; changes which are non-trivial to reverse.  There is a very good chance there will be more database changes before the final release, and there will not be an upgrade path from this development version (there will however be an upgrade path from the last stable version&#8230; 2.2.x).</p>

<h3>What&#8217;s New</h3>

<p>For now, I&#8217;m just going to have two follow-up posts talking about changes in the coming release.  I&#8217;m sure I&#8217;ll overlook something and may have to add a third post, but for now we&#8217;re looking at:</p>

<ul>
<li><a href="http://willnorris.com/2008/09/wp-openid-faster-stronger-better">Making the plugin more stable, extensible, and overall simpler</a></li>
<li><a href="http://willnorris.com/2008/09/providing-and-delegating-openids">OpenID Providing and Delegation</a></li>
</ul>

<h3>Test it Out</h3>

<p>The current plugin can be checked out from the DiSo subversion repository; grab the <a href="http://diso.googlecode.com/svn/wordpress/wp-openid/branches/3.0/">3.0 branch</a> .  In addition, it requires a special branch of the <a href="http://diso.googlecode.com/svn/wordpress/wp-xrds-simple/branches/refactoring/">XRDS-Simple plugin</a> to provide all the XRDS publishing stuff.  If you have a previous version of wp-openid installed, you <strong>must</strong> deactivate and reactivate the plugin for the database changes to be applied.  Again, keep in mind that these will be somewhat substantial changes to the OpenID portions of the database, so don&#8217;t do this on your production blog just yet. Please direct any support questions to the <a href="http://groups.google.com/group/diso-project">DiSo Mailing List</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://willnorris.com/2008/09/the-next-steps-with-wp-openid/feed</wfw:commentRss>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Delta and the Security Question Anti-Pattern</title>
		<link>http://willnorris.com/2008/08/delta-and-the-security-question-anti-pattern</link>
		<comments>http://willnorris.com/2008/08/delta-and-the-security-question-anti-pattern#comments</comments>
		<pubDate>Thu, 14 Aug 2008 00:47:49 +0000</pubDate>
		<dc:creator>Will Norris</dc:creator>
		
		<category><![CDATA[identity]]></category>

		<category><![CDATA[technology]]></category>

		<category><![CDATA[anti-pattern]]></category>

		<category><![CDATA[antipattern]]></category>

		<category><![CDATA[delta]]></category>

		<category><![CDATA[security questions]]></category>

		<guid isPermaLink="false">http://willnorris.com/?p=251</guid>
		<description><![CDATA[High on my list of most aggravating anti-patterns is that of setting up (in)security questions.  You know, where you have to choose three questions along the lines of:


What is your father&#8217;s middle name?
What is the name of your first pet?


Questions which, if answered truthfully, are incredibly easy to guess with just a modicum of [...]]]></description>
			<content:encoded><![CDATA[<p>High on my list of most aggravating anti-patterns is that of setting up (in)security questions.  You know, where you have to choose three questions along the lines of:</p>

<ul>
<li>What is your father&#8217;s middle name?</li>
<li>What is the name of your first pet?</li>
</ul>

<p>Questions which, if answered truthfully, are incredibly easy to guess with just a modicum of research.  But if you make something up, then you&#8217;re likely to forget what answer you gave.  It is <a href="http://www.google.com/search?q=%22security+questions%22">widely agreed</a> that these kinds of questions do not provide any real security, and there are a number of tricks people recommend for creating more secure answers.  I have my own solution, so that&#8217;s not really the point of this post.  This post is about what happened when I logged onto the <a href="http://www.delta.com/">Delta website</a> today.  <a href="http://www.flickr.com/photos/wnorris/2761469630/" title="Delta Security Questions" class="flickr" onclick="javascript:pageTracker._trackPageview ('/outbound/www.flickr.com');"><img src="http://farm4.static.flickr.com/3260/2761469630_104ece5d55_t.jpg" class="flickr right" /></a> After logging in with my four digit PIN (no, I&#8217;m not kidding&#8230; their website only supports four digit passwords), I was prompted to setup security questions for my account.  My account which I&#8217;ve had since 2001, where I&#8217;ve deliberately chosen not to setup the optional security questions.  However this time, I was notified that if I don&#8217;t setup security questions by September 17th, then I will lose access to my account.  Delta has decided to make security questions mandatory now for all of their SkyMiles customers.  That wouldn&#8217;t be so bad if it weren&#8217;t for <a href="https://www.delta.com/help/faqs/security_questions_faqs/index.jsp#cant_remember">what happens</a> when you forget your security questions:</p>

<blockquote>
  <p><strong>What happens if I can&#8217;t remember my security questions or answers?</strong><br />
  If you forget the answers to the security questions, and you exceed the maximum 
  allowable attempts to answer your security questions, your PIN will be emailed 
  to the address stored in your SkyMiles profile. If you don&#8217;t have an email address 
  on file then you can reset your PIN online provided you remember your personal 
  information.</p>
</blockquote>

<p>They simply email the PIN to you (in plain text) anyway!  I&#8217;m not sure what kind of &#8220;personal information&#8221; you would have to provide if you don&#8217;t have an email address on your account, but it can&#8217;t be much more than address and phone number.  </p>

<p>So I&#8217;m left wondering why on earth they are now forcing security questions down their customers&#8217; throats.  It would be one thing if they didn&#8217;t already have an automated password retrieval process, and this was an effort to cut support costs associated with forgotten passwords, but that&#8217;s not the case.  It might also be acceptable if they recognized the danger of simply emailing passwords around in plain text, and so enforced this based on the incorrect belief that it&#8217;s more secure.  But again, that is also not the case.  All they&#8217;ve managed to do is to provide someone with yet another way to potentially gain unauthorized access to my account.  If they really wanted to beef up security, how about allowing for more than a four digit PIN.  If you really want to make things more secure, allow me to sign in using my OpenID which supports <a href="http://www.myvidoop.com/">multi-factor authentication</a>.</p>

<p>Of course I know this is not a unique problem by any means.  Delta is not the only, nor the worst, offender.  And I&#8217;m not really sure why someone would want to break into my Delta account anyway&#8230; there&#8217;s really nothing in there of any value.  I know it was probably some schmuck at Delta with a three letter title and no clue about online security who forced the delta.com team to implement this.  I know all this&#8230; it&#8217;s just really aggravating.</p>
]]></content:encoded>
			<wfw:commentRss>http://willnorris.com/2008/08/delta-and-the-security-question-anti-pattern/feed</wfw:commentRss>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>wp-openid 2.2.0 released</title>
		<link>http://willnorris.com/2008/07/wp-openid-220-released</link>
		<comments>http://willnorris.com/2008/07/wp-openid-220-released#comments</comments>
		<pubDate>Thu, 24 Jul 2008 01:44:50 +0000</pubDate>
		<dc:creator>Will Norris</dc:creator>
		
		<category><![CDATA[identity]]></category>

		<category><![CDATA[technology]]></category>

		<category><![CDATA[eaut]]></category>

		<category><![CDATA[openid]]></category>

		<category><![CDATA[wordpress]]></category>

		<category><![CDATA[wp-openid]]></category>

		<guid isPermaLink="false">http://willnorris.com/?p=235</guid>
		<description><![CDATA[I&#8217;ve just released version 2.2.0 of the OpenID plugin for WordPress.  Notable additions in this version:


POST replay for comments - this should fix all the compatibility issues with other comment related plugins like reCaptcha.
MUCH better memory usage - like no longer needlessly building a 2MB object on every page load!
support for Email Address to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just released version 2.2.0 of the OpenID plugin for WordPress.  Notable additions in this version:</p>

<ul>
<li>POST replay for comments - this should fix all the compatibility issues with other comment related plugins like reCaptcha.</li>
<li>MUCH better memory usage - like no longer needlessly building a 2MB object on every page load!</li>
<li>support for <a href="http://eaut.org">Email Address to URL Transformation</a> - now you can use an email address anywhere you normally use an OpenID</li>
<li>fixed <a href="http://plugins.trac.wordpress.org/ticket/702">OpenID Spoofing vulnerability</a> - users&#8217; profile URLs must match one of their OpenIDs</li>
<li>using hooks for gathering user data - other plugins can now hook in and gather user info from FOAF, hCard, whatever</li>
<li>If OpenID authentication fails for whatever reason, the user is given the opportunity to submit their comment without OpenID</li>
<li>lots of little fixes, code refactoring and cleanup, and a lot of UI tweaks</li>
</ul>

<p>Download at <a href="http://wordpress.org/extend/plugins/openid/">http://wordpress.org/extend/plugins/openid/</a>.</p>

<p>I tested pretty thoroughly on WordPress 2.2 through 2.6 using PHP5.  I&#8217;m fairly certain I didn&#8217;t break PHP4, but let me know if you find any problems.</p>

<p>With this out the door, I&#8217;ll be jumping right into my feature list for the next major release &#8212; adding a native OpenID Server and delegation capabilities.  At that point, it should be able to handle all of your OpenID related needs.</p>
]]></content:encoded>
			<wfw:commentRss>http://willnorris.com/2008/07/wp-openid-220-released/feed</wfw:commentRss>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Changes to wp-openid</title>
		<link>http://willnorris.com/2008/05/changes-to-wp-openid</link>
		<comments>http://willnorris.com/2008/05/changes-to-wp-openid#comments</comments>
		<pubDate>Fri, 30 May 2008 00:10:47 +0000</pubDate>
		<dc:creator>Will Norris</dc:creator>
		
		<category><![CDATA[identity]]></category>

		<category><![CDATA[technology]]></category>

		<category><![CDATA[diso]]></category>

		<category><![CDATA[openid]]></category>

		<category><![CDATA[wordpress]]></category>

		<category><![CDATA[wp-openid]]></category>

		<guid isPermaLink="false">http://willnorris.com/?p=227</guid>
		<description><![CDATA[Today I committed a few pretty substantial changes to wp-openid, changing how the OpenID flow happens.  Effectively, I&#8217;ve created a new single endpoint which receives all OpenID responses, located at /openid_consumer.  Previously, these response were sent to a number of different endpoints depending on whether you were simply logging in, leaving a comment, [...]]]></description>
			<content:encoded><![CDATA[<p>Today I committed a few pretty substantial changes to wp-openid, changing how the OpenID flow happens.  Effectively, I&#8217;ve created a new single endpoint which receives all OpenID responses, located at <code>/openid_consumer</code>.  Previously, these response were sent to a number of different endpoints depending on whether you were simply logging in, leaving a comment, or adding a new OpenID to your WordPress account.  Consolidating on a single endpoint has allowed me to cleanup the wp-openid code considerably.</p>

<h3>Posting comments</h3>

<p>OpenID is integrated into comment posting by intercepting a comment submission to see if it includes a valid OpenID.  If it does, the user is sent to their OpenID provider to authenticate, and upon their return the comment is submitted.  Previously, the wp-openid plugin itself performed the comment submission, basically by copying the logic found in <code>wp-comments-post.php</code>.  This introduced a number of problems, especially when using any other plugins that modify the comment submission process such as <a href="http://wordpress.org/extend/plugins/wp-recaptcha/">reCaptcha</a>.  Violating <a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself">DRY</a> is bad, but necessary at times.  Breaking other plugins is really bad and had to be fixed.  </p>

<p>The current solution I&#8217;m using is to capture the comment submission POST, do the OpenID dance, and then replay the POST (modified if necessary).  If the OpenID dance results in the commenter being authenticated as a valid WordPress user, then the comment POST is modified to look like they were logged in all along.  If the OpenID dance results in user attributes (via attribute exchange, sreg, hcard, foaf, whatever), then those values override what was included in the original comment form.  If OpenID authentication fails for whatever reason, the idea is to give the user the option to submit the post without OpenID.  This part isn&#8217;t finish yet, but will be before the release.  Currently, if OpenID authentication fails, then the comment is very likely lost unless you use other means to <a href="http://wordpress.org/extend/plugins/comment-saver/">save the comment</a>.  And of course, if any other plugins include additional data in the original comment POST, it will be included in the replayed POST.</p>

<h3>Still left to do</h3>

<p>Because all of the OpenID responses are being sent to <code>/openid_consumer</code>, it&#8217;s not quite as simple to display friendly messages to the end user.  I&#8217;m may try to find a way to display error messages similar to how they look today (for example, login errors are displayed on the wp-login.php page, etc).  Otherwise, I&#8217;ll just have a somewhat generic error pages that is specific to OpenID errors, and then include links back to whatever the user was doing.</p>

<h3>Need Testers</h3>

<p>Right now, I&#8217;m in need of people to test this new version of the plugin to find any cases I may have overlooked.  Like I said, the message display is in need of work, but everything is at least functional as best as I can tell.  If you&#8217;re interested in testing, checkout a copy of the latest code from the <a href="http://diso.googlecode.com/svn/wordpress/wp-openid/trunk/">Diso Repository</a> and give it a shot.  If you have an older version installed, you will most certainly need to disable it first, then re-enable after installing the new version.  Otherwise, WordPress won&#8217;t handle the <code>/openid_consumer</code> endpoint properly.  If you have any questions or comments, you can leave a comment here or on the <a href="http://groups.google.com/group/diso-project">Diso Mailing List</a>.  As always, I would strongly discourage you from using this on your production WordPress installation (notice I&#8217;m not using it here).</p>
]]></content:encoded>
			<wfw:commentRss>http://willnorris.com/2008/05/changes-to-wp-openid/feed</wfw:commentRss>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Why I&#8217;m going to Vidoop</title>
		<link>http://willnorris.com/2008/05/why-im-going-to-vidoop</link>
		<comments>http://willnorris.com/2008/05/why-im-going-to-vidoop#comments</comments>
		<pubDate>Thu, 15 May 2008 07:52:25 +0000</pubDate>
		<dc:creator>Will Norris</dc:creator>
		
		<category><![CDATA[identity]]></category>

		<category><![CDATA[personal]]></category>

		<category><![CDATA[technology]]></category>

		<category><![CDATA[diso]]></category>

		<category><![CDATA[openid]]></category>

		<category><![CDATA[shibboleth]]></category>

		<category><![CDATA[usc]]></category>

		<category><![CDATA[vidoop]]></category>

		<category><![CDATA[wp-openid]]></category>

		<guid isPermaLink="false">http://willnorris.com/?p=226</guid>
		<description><![CDATA[So it&#8217;s not exactly news at this point, but it is indeed true that as of today I am now employed by Vidoop.  This has been a few months in the making, so I figured I&#8217;d explain a little of why and how we got to this point.

I&#8217;ve been working in the Identity Management [...]]]></description>
			<content:encoded><![CDATA[<p>So it&#8217;s <a href="http://blog.vidoop.com/archives/111">not</a> <a href="http://www.readwriteweb.com/archives/messina_norris_vidoop.php">exactly</a> <a href="http://factoryjoe.com/blog/2008/05/13/im-joining-vidoop-to-work-on-diso-full-time/">news</a> <a href="http://kveton.com/blog/2008/05/14/solutions-more-than-technology/">at</a> <a href="http://redmonk.net/archives/2008/05/14/distributed-social-networkers/">this</a> point, but it is indeed true that as of today I am now employed by Vidoop.  This has been a few months in the making, so I figured I&#8217;d explain a little of why and how we got to this point.</p>

<p>I&#8217;ve been working in the Identity Management space for a few years now.  I started getting involved with the <a href="http://shibboleth.internet2.edu/">Shibboleth</a> project while at the University of Memphis.  After a year and a half, I moved to California and took a job at USC working in their middleware group.  I&#8217;ve spent the last two years there helping to develop and manage various parts of the Identity Management cloud including the LDAP directories, meta-directory processes, and their Shibboleth environment.  In October 2006 I formally joined the core Shibboleth development team, focusing on the Shibboleth 2.0 Identity Provider.</p>

<p>Meanwhile, I have also been toying with OpenID for a couple of years.  In early 2007 or so, I sort of took over development of Alan Castonguay&#8217;s OpenID plugin for WordPress.  I started with a couple of new features, then worked to add support for the latest OpenID protocol, lots of code refactoring, etc.  I got to know characters like Chris Messina, Scott Kveton, and a host of others.  I continued making updates to the WordPress plugin as I had time, but it never felt like enough.  Don&#8217;t get me wrong, I certainly enjoyed the work I was doing at USC and with Shibboleth&#8230; I just would have liked to have had more time for everything else as well.  Every now and then Chris or Scott would prod me about going to work at Google or somewhere to spend more time on OpenID and related technologies, but I wasn&#8217;t ready to leave my work at USC.</p>

<p>Late last year, Chris Messina and Steve Ivy announced the DiSo Project, initially based on my updated wp-openid plugin.  Within the first week after it was announced, I sat down with Chris and Steve and we decided it would be best to officially move the wp-openid plugin under the DiSo umbrella to allow for tighter integration with the other planned work.  Then a lot happened this last February in the social networking space &#8212; Google <a href="http://google-code-updates.blogspot.com/2008/02/urls-are-people-too.html">announced</a> the Social Graph API and <a href="http://sgfoocamp08.pbwiki.com/FrontPage">SGFoo</a> really got people talking more about enriching the OpenID endpoint (<a href="http://kveton.com/blog/2008/02/04/sg-foocamp-08-wrap-up/">among other things</a>).  Things were beginning to move pretty fast, and I felt like if I didn&#8217;t jump in now then I&#8217;d end up watching all the great new developments from the sidelines.  I spent the next few months interviewing with a number of companies active in this space and made a couple of trips to San Francisco to talk with them in person.  </p>

<p>In the end, a dinner conversation with <a href="http://www.vidoop.com/management.php">Luke Sontag</a> had me sold.  I was quite familiar with Vidoop and their OpenID provider, knew they had a great development team, but had always been a little skeptical of the company.  After Luke gave me a better picture of their overall vision and where technologies like DiSo fit into that picture, I knew that these guys really &#8220;get it&#8221;.  They understand the importance of what DiSo is trying to do, and more importantly they are willing to do their part in making it a reality.  I love Vidoop&#8217;s OpenID implementation and have been using it since before I took this job, but that&#8217;s not why I did.  I took the job because the team at Vidoop know their shit, they know the kinds of problems we&#8217;re up against, and they are ready to take a shot at developing some real solutions.  Well that and I really can&#8217;t wait to get started working with Chris a lot more. :)</p>
]]></content:encoded>
			<wfw:commentRss>http://willnorris.com/2008/05/why-im-going-to-vidoop/feed</wfw:commentRss>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Identity on the phone</title>
		<link>http://willnorris.com/2008/03/identity-on-the-phone</link>
		<comments>http://willnorris.com/2008/03/identity-on-the-phone#comments</comments>
		<pubDate>Fri, 21 Mar 2008 07:46:22 +0000</pubDate>
		<dc:creator>Will Norris</dc:creator>
		
		<category><![CDATA[identity]]></category>

		<category><![CDATA[technology]]></category>

		<category><![CDATA[bank of america]]></category>

		<category><![CDATA[customer service]]></category>

		<category><![CDATA[phone]]></category>

		<guid isPermaLink="false">http://willnorris.com/2008/03/identity-on-the-phone</guid>
		<description><![CDATA[Yesterday I called Bank of America to find out what had happened to my income tax refund check.  I was prompted to enter my account number for &#8216;faster service&#8217;, but I instead simply pressed zero to bypass it.  Entering your account number leads you into this drawn out description of your current balance [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday I called Bank of America to find out what had happened to my income tax refund check.  I was prompted to enter my account number for &#8216;faster service&#8217;, but I instead simply pressed zero to bypass it.  Entering your account number leads you into this drawn out description of your current balance and such, which I frankly had no interest in.  I pressed only zero at another menu or two, and after waiting a few minutes I was greeted with a human being who as able to look into my missing refund check.  What struck me as a little odd is that the guy began asking me to verify my identity with the typical things like mother&#8217;s maiden name and such, but he never asked me for my account number or anything.  Apparently, their phone system looked up my account based on the phone number that I was calling from.  It was so nice!</p>

<p>Compare this to other times I call in to various companies, go ahead and enter my account number at the automated prompt, only to be asked for the exact same information all over again when I actually get to an operator.  What&#8217;s wrong with these people?!</p>

<p>(Though I still have my share of complaints with them in other areas&#8230;) Just another thing I &lt;3 about Bank of America.</p>
]]></content:encoded>
			<wfw:commentRss>http://willnorris.com/2008/03/identity-on-the-phone/feed</wfw:commentRss>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>OSIS Interop Testing</title>
		<link>http://willnorris.com/2008/03/osis-interop-testing</link>
		<comments>http://willnorris.com/2008/03/osis-interop-testing#comments</comments>
		<pubDate>Mon, 03 Mar 2008 18:06:51 +0000</pubDate>
		<dc:creator>Will Norris</dc:creator>
		
		<category><![CDATA[identity]]></category>

		<category><![CDATA[technology]]></category>

		<category><![CDATA[diso]]></category>

		<category><![CDATA[openid]]></category>

		<category><![CDATA[osis]]></category>

		<category><![CDATA[wp-openid]]></category>

		<guid isPermaLink="false">http://willnorris.com/2008/03/osis-interop-testing</guid>
		<description><![CDATA[The DiSo Project (well, wp-openid specifically) is participating in the Open-Source Identity System Interop Testing happening now until the RSA Conference in April.  WP-OpenID is an OpenID 1.1 and 2.0 consumer, and additionally uses the simple-registration extension.  We do not yet support attribute exchange.  Under the covers, we use the JanRain PHP [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://diso-project.org/">DiSo Project</a> (well, wp-openid specifically) is participating in the <a href="http://osis.idcommons.net/wiki/I3_User-Centric_Identity_Interop_through_RSA_2008">Open-Source Identity System Interop Testing</a> happening now until the <a href="http://www.rsaconference.com/2008/US/home.aspx">RSA Conference</a> in April.  WP-OpenID is an OpenID 1.1 and 2.0 consumer, and additionally uses the simple-registration extension.  We do not yet support attribute exchange.  Under the covers, we use the <a href="http://openidenabled.com/php-openid/">JanRain PHP Library</a>&#8230; a version somewhere between the 2.0.1 release and the latest code in the darcs repository.</p>

<p>Testers should be able to leave an authenticated comment on this page using any OpenID 1.1 or 2.0 provider.  We are aware of a bug that prevents interop with <a href="http://www.vox.com/">Vox</a> OpenIDs in certain cases.  Please do limit OSIS testing to this blog post.  If you run into trouble, you can <a href="/about">contact me</a> directly, or the <a href="http://groups.google.com/group/diso-project">DiSo Project List</a>.  Happy testing! :)</p>
]]></content:encoded>
			<wfw:commentRss>http://willnorris.com/2008/03/osis-interop-testing/feed</wfw:commentRss>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
	</channel>
</rss>
