<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><span class="Apple-style-span" style="-webkit-text-stroke-width: -1; ">Deron</span></div></div><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br></div><div>My advice is don't delegate to OP's that are using directed identity.</div><div><br></div><div>You will get unpredictable results from RP's depending on how they preform validation of the returned claim.</div><div><br></div><div>In an upcoming openID 2.1 errata we are&nbsp;hoping&nbsp;to clarify this in the spec.</div><div><br></div><div>In sec 11.2 of OpenId 2.0</div><div><br></div><div>The verification rule is that if ether the openid.claimed_id or openid.identity changes then discovery must be preformed on the&nbsp;openid.claimed_id the openid.op_enpoint must match a URI value in the openID&nbsp;service.</div><div><br></div><div>What people get confused about is that if the openid.claimed_id is&nbsp;different&nbsp;from openid.identity then openid.identity must match the &lt;LocalID> element.</div><div><br></div><div>So in your yahoo example your &lt;LocalID> is&nbsp;<a href="http://yahoo.com/">http://yahoo.com/</a>&nbsp;and the openid.identity is&nbsp;<a href="https://me.yahoo.com/a/3Uz4wakJ.....etc.....'">https://me.yahoo.com/a/3Uz4wakJ.....etc.</a></div><div><br></div><div>If they&nbsp;matched&nbsp;then you would be good to go.</div><div><br></div><div>However if you use an RP who is not&nbsp;properly&nbsp;checking the openid.identity against the&nbsp;discovered&nbsp;information(a lot of them) anyone with a yahoo account can log into those RPs as&nbsp;<a href="http://deron.meranda.us/'">http://deron.meranda.us/</a></div><div><br></div><div>Verisign works because the &lt;LocalID> matches what is returned in openid.identity.</div><div><br></div><div>Google is not supporting delegation as far as I can tell probably smart on there part.</div><div><br></div><div>The other thing that you will notice is that RP's are not all doing service selection according to the XRI 2.0 spec I have seen priority ignored or sometimes in reverse order in testing.</div><div><br></div><div>That is another thing that needs cleaning up in openID 2.1 and the upcoming XRD spec that replaces XRDS-Simple and Yadis.</div><div><br></div><div>I hope this helps.</div><div><br></div><div>Regards</div><div>John Bradley</div><div>=jbradley</div><div><br></div>Date: Thu, 6 Nov 2008 11:59:07 -0500<br>From: "Deron Meranda" &lt;<a href="mailto:deron.meranda@gmail.com">deron.meranda@gmail.com</a>><br>Subject: [OpenID] Problems with delegation and directed identity OPs<br>To: "OpenID List" &lt;<a href="mailto:general@openid.net">general@openid.net</a>><br>Message-ID:<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>&lt;<a href="mailto:5c06fa770811060859v52f661ael5bccd1fcee1b19b9@mail.gmail.com">5c06fa770811060859v52f661ael5bccd1fcee1b19b9@mail.gmail.com</a>><br>Content-Type: text/plain; charset=UTF-8<br><br>I am trying to use delegation with OPs that use directed identities and<br>I'm having problems getting it to work.<br><br>I want to use my own domain as my claimed identity<br>&lt;'<a href="http://deron.meranda.us/'">http://deron.meranda.us/'</a>>, but delegate to a public OP. &nbsp;So I set up an<br>XRDS document under my domain (using an X-XRDS-Location header).<br><br>I've tried this with three different public OPs that have different behaviors:<br><br>&nbsp;Verisign PIP - fixed identity<br>&nbsp;Yahoo! - directed ID , can choose among a set of IDs (default is randomish)<br>&nbsp;Google - directed ID, random per-RP identities<br><br>The XRDS document I'm serving from my domain contains these services:<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- &nbsp;**** GOOGLE **** --><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Service priority="1"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Type><a href="http://specs.openid.net/auth/2.0/signon">http://specs.openid.net/auth/2.0/signon</a>&lt;/Type><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;URI><a href="https://www.google.com/accounts/o8/ud">https://www.google.com/accounts/o8/ud</a>&lt;/URI><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;LocalID><a href="https://www.google.com/accounts/o8/id">https://www.google.com/accounts/o8/id</a>&lt;/LocalID><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Service><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- **** VERISIGN **** --><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Service priority="2"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Type><a href="http://specs.openid.net/auth/2.0/signon">http://specs.openid.net/auth/2.0/signon</a>&lt;/Type><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;URI><a href="https://pip.verisignlabs.com/server">https://pip.verisignlabs.com/server</a>&lt;/URI><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;LocalID><a href="https://dmeranda.pip.verisignlabs.com/">https://dmeranda.pip.verisignlabs.com/</a>&lt;/LocalID><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Service><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- **** YAHOO! **** --><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Service priority="3"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Type><a href="http://specs.openid.net/auth/2.0/signon">http://specs.openid.net/auth/2.0/signon</a>&lt;/Type><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;URI><a href="https://open.login.yahooapis.com/openid/op/auth">https://open.login.yahooapis.com/openid/op/auth</a>&lt;/URI><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;LocalID><a href="http://yahoo.com/">http://yahoo.com/</a>&lt;/LocalID><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Service><br><br>Now what I'm seeing varies depending on OP (I adjust the priority levels<br>to test each one)...<br><br>Verisign: Works. &nbsp;My RP gets a success with:<br>&nbsp;&nbsp;openid.claimed_id = '<a href="http://deron.meranda.us/'">http://deron.meranda.us/'</a><br>&nbsp;&nbsp;openid.identity = '<a href="https://dmeranda.pip.verisignlabs.com/'">https://dmeranda.pip.verisignlabs.com/'</a><br><br>Yahoo!: Almost works; Yahoo! let me pick which ID to use and returns<br>success with<br>&nbsp;&nbsp;openid.claimed_id = '<a href="http://deron.meranda.us/'">http://deron.meranda.us/'</a><br>&nbsp;&nbsp;openid.identity = '<a href="https://me.yahoo.com/a/3Uz4wakJ.....etc.....'">https://me.yahoo.com/a/3Uz4wakJ.....etc.....'</a><br>but then the RP fails while validating the response<br>&nbsp;&nbsp;"OpenID authentication failure: No matching endpoint found after<br>discovering&nbsp;<a href="http://deron.meranda.us/">http://deron.meranda.us/</a>"<br><br>Google: Works, but I don't keep my claimed id<br>&nbsp;&nbsp;openid.claimed_id =<br>'<a href="https://www.google.com/accounts/o8/id?id=AItOaw.....etc.....'">https://www.google.com/accounts/o8/id?id=AItOaw.....etc.....'</a><br>&nbsp;&nbsp;openid.identity =<br>'<a href="https://www.google.com/accounts/o8/id?id=AItOaw.....etc.....'">https://www.google.com/accounts/o8/id?id=AItOaw.....etc.....'</a><br><br>So how do I get OPs like Yahoo! and Google to delegate in the same way<br>that Verisign does?<br>--&nbsp;<br>Deron Meranda<br></div></div><br></body></html>