Non-recoverable auth failure?
Carl Howells
chowells at janrain.com
Tue Jun 21 11:19:05 PDT 2005
One thing currently absent in the protocol is some form of
non-recoverable authentication failure. The only response for failing
to authenticate that's in the spec is to give the user some chance to
authenticate. But that doesn't seem like it will always be sufficient.
Consider the case of an ID server that locks an account for 24 hours
after three consecutive failed logins. I'm sure everyone is familiar
with that kind of behavior, and can see it as being appropriate in some
cases. When such an ID server has locked an account and someone tries
to log in with that account, the current behavior doesn't quite make
sense. It is effectively telling the consumer "it didn't work, but if
you go here, you might be able to fix it." That's a misleading
statement, as it's just not true. Going to that url won't fix it. This
is a case where it would be clearly better to tell the consumer "that
login is denied."
Having such a message still doesn't reveal any information about why the
login has been denied. It just lets the consumer know that it should
present an error message to the user, rather than trying to get the user
to complete a login sequence that won't be completed.
Also... While looking at the version 0 specs to see the flow for
recoverable auth failure, it seems very strange in checkid_immediate mode.
* auth fails
* send back a response, openid.mode=id_res&openid.user_setup_url=blah.
Well, that feels a bit strange on its own, as id_res seems to be a
heavily overloaded mode. But that's not the point I'm trying to
demonstrate.
* consumer pops up a window (or something) going to user_setup_url.
That's where things don't quite make sense. It seems like instead of
having an openid.post_grant argument added, it should instead use
another openid.return_to=url argument. First, it would remove the
current necessity of having the server encode the URL into the
user_setup_url in case the consumer sets openid.post_grant=return.
Second, it covers all the cases just as well. The return_to url can
easily generate javascript to close a popup, as well as notifying its
parent frame that the authentication attempt has concluded so the parent
can then take whatever behavior it sees fit.
Thanks for reading through this. Let me know what you all think.
Carl Howells
More information about the yadis
mailing list