Agreed.&nbsp; Pinging in advance in any fashion probably isn&#39;t the answer.&nbsp; But it&#39;s a shame that, aside from frames which suffer from fear of phishing as I described, there&#39;s no way for an RP to recover after an OP fails.&nbsp; The user just needs to learn to click Back if that happens.&nbsp; But even then, what is the user to do?&nbsp; Logging in again will surely fail again..... so he leaves the RP site.&nbsp; To an RP that really doesn&#39;t want to lose users to this, they may want to seriously consider the extra checkbox saying &quot;choose your provider.&quot;&nbsp; <br>
<br>But then, 99.9% of OpenID users today don&#39;t have an XRDS listing more than one OP anyway.&nbsp; Most of them have <a href="http://yahoo.com">yahoo.com</a> or some other extremely reliable OP though, so it&#39;s mostly a non-issue I guess.<br>
<br>Just ramblings as you can tell.<br><br><div class="gmail_quote">On Wed, Jul 16, 2008 at 1:02 AM, James Tindall &lt;<a href="mailto:james@atomless.com">james@atomless.com</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Yes, a redirect does not solve the problem of an offline OP. I think<br>
you&#39;re right &#39;pinging&#39; the OP prior to authenticating to ensure that<br>
it&#39;s online may be the only solution.<br>
It just seems unfortunate to have to add yet another RP to OP<br>
communication step just to cater for any, probably extremely infrequent,<br>
OP downtime?<br>
<div><div></div><div class="Wj3C7c"><br>
=james.tindall<br>
<br>
Andrew Arnott wrote:<br>
&gt; As I understand it, checkid_immediate is an optional step the RP can take,<br>
&gt; that was added for AJAX scenarios. &nbsp;In my mind, this is a useless feature as<br>
&gt; checkid_setup also tends to be &#39;immediate&#39; if checkid_immediate would have<br>
&gt; worked, and if checkid_immediate fails, then the very next thing the RP<br>
&gt; inevitably does is follow up with a checkid_setup request.<br>
&gt;<br>
&gt; As far as testing for OP-deadness, checkid_immediate is no good because it&#39;s<br>
&gt; a redirect of the browser just as checkid_setup is. &nbsp;If the OP is dead, the<br>
&gt; user gets a dead-end error page regardless of what the openid.mode is set<br>
&gt; to.<br>
&gt;<br>
&gt; Now, assuming all OPs are alive, the idea of running through all endpoints<br>
&gt; with checkid_immediate first to see if any happen to authenticate, and only<br>
&gt; if that fails doing a checkid_setup on the first good OP in the list is an<br>
&gt; interesting idea. &nbsp;It would serve the user as he/she would have a higher<br>
&gt; likelihood of not being prompted for credentials, which is cool. &nbsp;On the<br>
&gt; negative side, it means that if the user has 3+ OPs listed, he gets<br>
&gt; redirected *4 times* before finally seeing his first OP&#39;s authentication<br>
&gt; page if none of them are willing to checkid_immediate.<br>
&gt;<br>
&gt; On Tue, Jul 15, 2008 at 9:16 AM, James Tindall &lt;<a href="mailto:james@atomless.com">james@atomless.com</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt;&gt; I&#39;ve not double checked what the spec has to say about this Andrew but it<br>
&gt;&gt; seems to me that if an association with the chosen OP exists and is alive<br>
&gt;&gt; then the RP should simply attempt authorization using &#39;checkid_immediate&#39;<br>
&gt;&gt; and if that then fails the RP should try authentication using the next<br>
&gt;&gt; endpoint in the list?<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Andrew Arnott wrote:<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;&gt; Another thought: since a responsible RP only creates a single association<br>
&gt;&gt;&gt; with an OP and stores it until it expires, and these associations often<br>
&gt;&gt;&gt; last<br>
&gt;&gt;&gt; days, if the user has an endpoint in the XRDS doc that points to an OP<br>
&gt;&gt;&gt; that<br>
&gt;&gt;&gt; is currently down, but with whom the RP has an existing, unexpired<br>
&gt;&gt;&gt; association with, the RP shouldn&#39;t try to create an association with that<br>
&gt;&gt;&gt; OP. &nbsp;Instead, it might say to itself &quot;yes, I successfully have an<br>
&gt;&gt;&gt; association with this OP, so I&#39;ll redirect the user to it&quot;, but the OP<br>
&gt;&gt;&gt; happens to be down for 5 hours that day, effectively disabling the user&#39;s<br>
&gt;&gt;&gt; ability to log in, in spite of the multiple OPs listed in the XRDS doc.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; So... perhaps OpenID can have a &quot;ping, are you alive?&quot; message in its<br>
&gt;&gt;&gt; protocol. &nbsp;But then we&#39;re no better than &quot;dumb&quot; RPs having to make<br>
&gt;&gt;&gt; multiple<br>
&gt;&gt;&gt; hits to the OP instead of just one.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Another idea that keeps occuring to me is that the RP can use a frameset<br>
&gt;&gt;&gt; to<br>
&gt;&gt;&gt; keep an RP frame around and have the OP authentication happen in another<br>
&gt;&gt;&gt; frame (iframe or frameset would work). &nbsp;That way, the RP frame could have<br>
&gt;&gt;&gt; something like &quot;Is your Provider not responding? &nbsp;Click here to try your<br>
&gt;&gt;&gt; next best choice...&quot; or something to that effect. &nbsp;The problem with this<br>
&gt;&gt;&gt; idea is that the URL on the browser will always be the RP, so the user<br>
&gt;&gt;&gt; will<br>
&gt;&gt;&gt; have one less way to confirm that this is indeed his genuine Provider and<br>
&gt;&gt;&gt; not one of those notorious OpenID RP phishing attacks.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Anyone have any idea how to solve this dead OP problem?<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Tue, Jul 15, 2008 at 1:52 AM, James Tindall &lt;<a href="mailto:james@atomless.com">james@atomless.com</a>&gt;<br>
&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I&#39;ve recently been writing an openid relying party library for the<br>
&gt;&gt;&gt;&gt; Kohana php framework and I think you&#39;re right, the way I&#39;ve tried to<br>
&gt;&gt;&gt;&gt; handle multiple enpoints returned from the discovery phase is to first<br>
&gt;&gt;&gt;&gt; sort them by their priority values and then also filter out any that do<br>
&gt;&gt;&gt;&gt; not meet the (extension / security / openid-version) requirements set in<br>
&gt;&gt;&gt;&gt; the current relying party configuration and then finally attempt to<br>
&gt;&gt;&gt;&gt; establish an association with each endpoint in turn until a successfull<br>
&gt;&gt;&gt;&gt; association response is returned.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I feel that all this is best done invisibly rather than requesting the<br>
&gt;&gt;&gt;&gt; user to jump through extra hoops. The user has after all -at some point-<br>
&gt;&gt;&gt;&gt; set the priority of the endpoints listed in the xrds and I suspect that<br>
&gt;&gt;&gt;&gt; most would not wish for further input during the process of<br>
&gt;&gt;&gt;&gt; authentication. My assumption being that the point of multiple endpoints<br>
&gt;&gt;&gt;&gt; is to hopefully cater for the requirements of as many different relying<br>
&gt;&gt;&gt;&gt; parties as possible and to have alternative/backup endpoints incase of<br>
&gt;&gt;&gt;&gt; errors or failures with any of the other endpoints in the list during<br>
&gt;&gt;&gt;&gt; authentication?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; =james.tindall<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Andrew Arnott wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; I&#39;m curious how other libraries do (or plan to) handle multiple<br>
&gt;&gt;&gt;&gt;&gt; endpoints<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; in<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; a single XRDS document. &nbsp;I see a few considerations, in order:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; &nbsp; 1. Enumerate the services in the XRDS-defined priority order<br>
&gt;&gt;&gt;&gt;&gt; &nbsp; 2. Skip the services that do not expose OpenID endpoints.<br>
&gt;&gt;&gt;&gt;&gt; &nbsp; 3. Skip the OpenID endpoints with Providers that do not quality<br>
&gt;&gt;&gt;&gt;&gt; &nbsp; (whitelist/blacklist or advertised extension support<br>
&gt;&gt;&gt;&gt;&gt; &nbsp; 4. Take the first endpoint that is left after these filters.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; But what about the rest of the endpoints listed? &nbsp;Here are some<br>
&gt;&gt;&gt;&gt;&gt; possibilities:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; &nbsp; 1. Just use the first endpoint and trust it works.<br>
&gt;&gt;&gt;&gt;&gt; &nbsp; 2. Try each one successively. &nbsp;That is, the RP should attempt to<br>
&gt;&gt;&gt;&gt;&gt; &nbsp; establish an association with each one until it succeeds with one, and<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; then<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; &nbsp; redirect the user to that one for authentication. &nbsp;Redirecting the<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; user to<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; &nbsp; an unavailable Provider will result in a dead end failure page and the<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; RP<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; &nbsp; will lose the opportunity at this point to try the next endpoint.<br>
&gt;&gt;&gt;&gt;&gt; &nbsp; 3. A variant on the last, except that in addition to skipping OPs that<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; do<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; &nbsp; not respond to association requests, allow the user to &quot;fail&quot; or<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; cancel the<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; &nbsp; authentication on the first provider and proceed to the second<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; provider<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; &nbsp; listed for another authentication attempt.<br>
&gt;&gt;&gt;&gt;&gt; &nbsp; 4. Offer the user a list of his/her providers to choose from for<br>
&gt;&gt;&gt;&gt;&gt; &nbsp; authentication.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Have thoughts been written already on which of these are best and/or<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; common<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; in existing libraries?<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; ------------------------------------------------------------------------<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt;&gt; general mailing list<br>
&gt;&gt;&gt;&gt;&gt; <a href="mailto:general@openid.net">general@openid.net</a><br>
&gt;&gt;&gt;&gt;&gt; <a href="http://openid.net/mailman/listinfo/general" target="_blank">http://openid.net/mailman/listinfo/general</a><br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
<br>
_______________________________________________<br>
general mailing list<br>
<a href="mailto:general@openid.net">general@openid.net</a><br>
<a href="http://openid.net/mailman/listinfo/general" target="_blank">http://openid.net/mailman/listinfo/general</a><br>
</div></div></blockquote></div><br>