[OpenID] The 3xx Redirect Debate

David Recordon drecordon at sixapart.com
Sat Mar 29 08:19:39 UTC 2008


Wow!  Just got done reading the threads both on this list and the  
specs list.  Certainly a lot of passion in the discussion and good  
points being made all the way around.  It was a little disheartening  
to see how brusk it got at times (arguing about what mailing list to  
use wasn't really moving the discussion forward).  I'm sending this to general at openid.net 
  (and will forward a copy to specs at openid.net) since the majority of  
the discussion took place on general, even though it was probably  
better suited for specs.  That said, let me see if I can help provide  
a few clarifying thoughts.

Completely ignoring technology for a moment, Noah's use case of being  
able to enter his domain and have it be displayed / treated as his  
OpenID at a Relying Party while having a browser redirect to /about/  
for normal people seems quite reasonable.  I have a gut feeling that  
this is a relatively rare practice (guessing most people don't think  
about doing it), but from a user experience perspective I like it.

 From a technology perspective, as the discussion very clearly showed,  
making this work with some form of predictable backwards compatibility  
isn't easy.  With that in mind, the number of OpenIDs that currently  
issue a 303 redirect is probably fairly small since I would imagine  
that the majority of people don't understand the difference between  
301, 302, and 303.  I know it took me re-reading RFC 2616 and  
Wikipedia a few times.

 From a historical perspective the original OpenID 1.1 specification  
said:
  > Note that the user can leave off "http://" and the trailing "/".  A
  > consumer must canonicalize the URL, following redirects
  > and noting the final URL.  The final, canonicalized URL is the
  > user's identity URL.

It, and now the 2.0 spec as well, do not differentiated between the  
type of HTTP redirect that is occurring.  Rather, an OpenID RP  
following the OpenID specification would follow any type of  
redirect(s) (making its own choice of how many is too many as RFC 2616  
infers) and then if successful treat the resulting URL as the user's  
OpenID claimed identifier.  It would then perform discovery on that  
resulting URL, looking for a provider or delegation information.   
While certainly not to the HTTP spec, I believe the original intent  
was to conflate the various types of redirects into a single meaning  
for OpenID.  Is that "right", maybe not, but it does make the simple  
cases simpler.

The largest problem I see is that in the wild there is a lack of  
consistent understanding and behavior around 3xx response codes.  A  
302 is often used when a 301 should be, a 302 is treated as a 303, and  
I doubt the difference between a 302 and a 307 is widely understood.   
301, 302, and 307 are clearly pretty similar and I do agree that a 303  
is designed to be treated a bit differently; "See Other" versus  
talking about something being found, moved, or redirected.  I could  
see the case being made that an OpenID RP should treat a 301, 302, or  
307 as a 301 (current behavior of use the final URL after all  
redirects) and then a 303 treated as a different form of OpenID  
delegation.  (Since delegation is basically saying "I'm URL A, but I  
can prove I also own URL B which I delegate to" which is similar to  
Noah's use case of "I'm URL A, but people should see me at URL B, and  
URL B delegates to my provider.")  This would add future support for  
Noah's use case while probably breaking a small number of OpenIDs.

I don't have a clear answer, but I do agree that a future revision of  
OpenID Authentication should spell out clearly what to do with these  
various 3xx codes.  I think the first step there is some real research  
into the actual use of 303 on the web as it might relate to OpenID.

Noah, thanks for bringing this up!

--David




More information about the general mailing list