[OpenID] Delegation leading to new accounts on websites

George Fletcher gffletch at aol.com
Mon Jun 22 19:43:37 UTC 2009


If I understand this correctly...

1. I enter http://www.flickr.com/photos/gffphotos (shameless plug for my 
photo stream:)
2. The RP  normalizes the "user entered identifier" (in this case it's 
the same URL)
3. The RP does discovery on the "user entered identifier" and the HTML 
defines the OP as yahoo (no local_id)
4. The RP sends the AuthN request with 
openid.identity=http://www.flickr.com/photos/gffphotos
5. Yahoo ignores the openid.identity field and does directed identity
6. Yahoo sends back an openid.claimed_id=https://me.yahoo.com/<randomstring>
7. Since the openid.identity value the RP sent does not equal the value 
the OP returned, the RP does discovery on the 
https://me.yahoo.com/<randomstring>
8. Discovery shows that the yahoo OP is indeed authoritative for the URL
9. The RP has to ignore the value entered by the user (e.g. 
http://www.flickr.com/photos/gffphotos) and just use the value the OP 
returned (e.g. https://me.yahoo.com/<randomestring>) because there is no 
way to know whether the returned identifier from yahoo actually maps to 
the value entered by the user

The following is also true if I try and delegate my vanity URL to an 
flickr based OpenID.

I believe that if the RP sends an identifier for the user that is NOT 
the directed identity select URL, then the OP should either (A) 
authenticate only the specified identity or (B) fail the request. 
Allowing the request to succeed but for an identity totally different 
than what the user identified to the RP is just confusing.

Thanks,
George

P.S. More comments inline

John Bradley wrote:
> George,
>
> The combination of directed identity is still a real interop issue 
> because it is not well explained in openID 2.0.
>
> When the claimed_id (less fragment)  or the identity are different in 
> the response from the request the RP must rediscover the 
> openid.claimed_id.
>
> If delegation was done the openid.identity must match the LocalID in 
> the XRD.
I don't think this will work in the Yahoo case. The openid.identity 
value returned by Yahoo is the https://me.yahoo.com/<randomstring>. If I 
do a discovery on this identifier, it case say that the "LocalID" at 
Yahoo is the same value, but that doesn't mean it matches to the URL the 
user entered at the RP. If the XRDS response, somehow ties the directed 
identity value back to the flickr URL the all the pseudonymous benefits 
of directed identity are broken.
>
> If the RP doesn't do this step anyone with a Yahoo account can log 
> into any openID that is delegated to Yahoo.
It isn't the discovery of the returned openid.claimed_id value that 
protects against this case. It's the fact that the RP ignores the value 
the user entered and even it's associated local_id value and instead 
just uses the values returned by the OP. It is impossible to associate 
in anyway the value the user entered with the value the OP returns.
>
> Yahoo is following the spec as intended.  
>
> There is an OSIS test for RPs to check if they are vulnerable to this.
>
> If the second discovery verifies then 1 can still be used safely as 
> the users identifier.
>
> I had to sit Johnny Bufu down to explain it to me what they intended 
> when they wrote 2.0.
>
> I couldn't extract the logic from the spec itself for the delegating 
> to a directed identity flow.
>
> John B.
>
> On 22-Jun-09, at 11:45 AM, general-request at openid.net 
> <mailto:general-request at openid.net> wrote:
>
>> Date: Mon, 22 Jun 2009 11:44:03 -0400
>> From: George Fletcher <gffletch at aol.com <mailto:gffletch at aol.com>>
>> Subject: Re: [OpenID] Delegation leading to new accounts on websites
>> To: Andrew Arnott <andrewarnott at gmail.com 
>> <mailto:andrewarnott at gmail.com>>
>> Cc: "general at openid.net <mailto:general at openid.net>" 
>> <general at openid.net <mailto:general at openid.net>>
>> Message-ID: <4A3FA6C3.9060305 at aol.com <mailto:4A3FA6C3.9060305 at aol.com>>
>> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>>
>> Isn't one of the underlying issues the fact that there are really 3 
>> identifiers in this scenario?
>> 1. the identifier entered by the user (claimed_id or i-name)
>> 2. the discovered/resolved identifier ("local_id" or "i-number")
>> 3. the identifier returned by the OP
>>
>> In the case of OpenID 2.0 protocol flow, the RP has to remember #1 and 
>> send #2 as the openid.identity parameter. If the OP does NOT return 
>> openid.identity == #2, then the OP has chosen to do directed identity 
>> regardless of the request and the RP must throw out #1 and take #3 as 
>> the user's identifier.
>>
>> This causes some weird user experience issues, but this is what we ran 
>> into when implementing OpenID 2.0 Relying Party support.
>>
>> Thanks,
>> George
>
> = 




More information about the general mailing list