[OpenID] XRDS multi-OP listing?

Martin Atkins mart at degeneration.co.uk
Thu Jun 5 20:35:15 UTC 2008


SitG Admin wrote:
>> It would be better to say "I'd like OP1, but only for PCs, and OP2 
>> for iPhones, ..." all somehow expressed in the XRDS file so the RP 
>> could do the redirect to the right OP based on which device I'm 
>> using, all while using the same identifier.
> 
> On a related note, I'd like it if the XRDS file could (optionally) 
> have multiple OP's identified in such a way that the RP *should* take 
> its cue to (if offering that feature) ask the user which OP they want 
> to use rather than redirecting them right away. I'm not sure but I 
> *think* XRDS would be the right place to start with this; the idea 
> being that, if I had an OP that used one-time-only passwords for 
> authentication, I'd want to save those pre-readied passwords for the 
> situations when I *really* wanted them, and otherwise use a "weaker" 
> OP.
> 

Again, I can get behind the use-case but I'm incredibly hesitant about 
making RPs do additional work. Turning a site into an RP is already a 
tough sell.

You got me thinking though about a way for the user (or someone on his 
behalf) host the selector himself. At a high level, the flow might be 
something like this:

  * User enters identifier at RP
  * RP finds that this identifier has an "provider selector", and 
redirects the user to the selector instead of to the provider directly.
  * The selector optionally displays some UI and then sends the user 
over to a selected OP.
  * The OP makes an assertion as normal. The identifier declares that 
the OP is allowed to make assertions for it, so authentication succeeds.

I consider this to essentially be an alternative version of delegation 
where the target of the delegation is determined dynamically rather than 
hard-coding it.

Legacy RPs would still see the standard OpenID service records and pick 
one via standard XRD priority rules. All of the possible providers must 
be listed for the last step above to succeed, so backward-compatibility 
is unavoidable.

The advantages of this are:
  * The provider selector is run by the user (or some sort of 
third-party on his behalf) rather than requiring each RP to implement 
its own selector. The implementation work for RPs is considerably 
reduced, and only users that have a requirement for multiple identity 
providers would need to worry about this extension.
  * The provider selector can use arbitrary mechanisms to select a 
provider. It might display a list and ask the user to choose one, or it 
might make a decision automatically based on (for example) a flag set by 
the RP saying that it's a mobile-oriented site. The selection mechanism 
can now be anything the user desires rather than requiring all 
mechanisms to be codified in a specification and implemented by each RP 
individually.

The main drawbacks I see are:
  * In the flow as I've described it, the initial indirection prevents 
the RP from pre-associating with the OP, and thus forces stateless mode. 
An adjustment to the flow could probably address this concern.
  * It introduces additional latency into the already-marginal OpenID 
transaction by adding at least two more redirects.
  * There is considerable overhead for a user to implement this vs. just 
adding some extra static stuff into the XRDS document. However, this 
could create a market for "delegation providers" that host delegation 
services on behalf of a user, and optionally host the associated 
delegating identity URL too.[1]
  * It creates an inconsistent user experiencebetween authenticating at 
RPs that support this extension vs. RPs that do not. I think this is 
inevitable for almost any OpenID extension, though.

I think this could be a path worth persuing to solve all of these 
multiple-OP use cases with a single extension.




------------------------------------------

[1] My thinking here is that there is now an opportunity for the 
delegation provider to introduce UI into the authentication flow, which 
opens up additional possible revenue opportunities. The most obvious 
example is putting banner ads on the provider selector page.





More information about the general mailing list