To be clear, you are +1 on using only JSON for server responses on the token 
endpoint?

EHL

From: Evan Gilbert [mailto:uid...@google.com]
Sent: Sunday, June 13, 2010 11:20 AM
To: Eran Hammer-Lahav
Cc: Robert Sayre; OAuth WG (oauth@ietf.org)
Subject: Re: [OAUTH-WG] Proposal for single JSON response format


On Sun, Jun 13, 2010 at 8:18 AM, Eran Hammer-Lahav 
<e...@hueniverse.com<mailto:e...@hueniverse.com>> wrote:
Using JSON in the end-user authorization endpoint response is still something 
we need to discuss. In the web server flow, it makes more sense to use 
form-encoded because the URI is processed by a typical query processor 
(automatic in every web server). In the fragment, it is a question of 
preference, and I was told that there are many benefits to using JSON. I think 
Facebook uses JSON in such a way.

However, there is still value in using JSON across all server responses because 
it allows returning the same structured data.

Can you explain the XSS hole from parsing a random JSON string?

Naive processor calls:
var href = document.location.href;
var jsonBlob = href.substring(href.indexOf('#'), href.length)
var userData  = eval(jsonBlob);

This code would allow executing arbitrary code by sending a user a link, which 
could, for example, steal your cookies on a site.

The fix is just a really complicated RegEx match - here is sample 
code<http://www.google.com/codesearch/p?hl=en#MSH8LMSqi38/trunk/features/core/json.js&q=parse%20gadgets.json%20shindig%20package:%22http://svn.apache.org/repos/asf/incubator/shindig/%22&sa=N&cd=1&ct=rc&l=141>
 from Shindig that does this correctly - but I would worry that implementers 
would do the simple thing and just eval the JSON. It also seems like a sign of 
a design issue if the spec requires this regex.


If all server responses are JSON, why does the client have to do form-decoding?

Redirect_uri needs to be put into a URL somehow, and the URL may have other 
query parameters or other content in the fragment. I'm making the assumption 
that we would put this into a query parameter - otherwise we need to specify 
ourselves how to encode the JSON to be URL-safe and not conflict with other 
parameters.

What simple model? Format isn't a model.
Sorry, the statement about "simple model" wasn't that helpful without context. 
Here's the context:

 *   We currently have listed 4 named parameters that may be returned.
 *   Using query parameters is an obvious / clear way to return these 
parameters when encoded in a URL (in the fragment, a common practice is to use 
the same query parameter format, but after the hash).
 *   All modern coding environments I know of can pull out simple key / value 
pairs encoded in URL parameters. Issues I've heard with URL parameters are all 
around:

    *   Canonicalization of parameters for signing, and
    *   Parameters that are not simple key/value pairs (i.e. how do you encode 
a linefeed.

 *   The data returned on a URL should probably *not* be the same as what you 
would return on the server. This is because the data is untrusted - evildoers 
can construct a URL with the wrong JSON data.
So my preference would be to leave the redirect URI as simple key/value pairs 
and actively try to discourage adding structured / complex content. We can use 
a followup call to the AS with the access token on the server side for complex 
data, and JSON is the right response format for this followup call.

EHL

From: oauth-boun...@ietf.org<mailto:oauth-boun...@ietf.org> 
[mailto:oauth-boun...@ietf.org<mailto:oauth-boun...@ietf.org>] On Behalf Of 
Evan Gilbert
Sent: Sunday, June 13, 2010 2:47 AM
To: Robert Sayre
Cc: OAuth WG (oauth@ietf.org<mailto:oauth@ietf.org>)
Subject: Re: [OAUTH-WG] Proposal for single JSON response format

-1

I disagree very strongly with this approach if I'm understanding correctly. Let 
me paraphrase to make sure I understand:

All responses, even those encoded in a browser URL redirect back from the AS 
(redirect with verification code in the web server flow and the redirect with 
token in the user-agent flow) will be JSON

This means that we will have a URL-encoded JSON blob as a form parameter (as it 
has to play nicely with existing URL parameters). So the response back in the 
web server flow would be:
  
https://client.com/receiveVerificationCode?existingParam=value&oauth2=%7Bcode%3A'abc123'%2C+state%3A+'randomstatedata'%7D
and the response back in the user-agent flow would be
  
https://client.com/page?existingParam=value&oauth2=%7Baccess_token%3A+'accesstoken1234'%2Cexpires_in%3A3600%2Cstate%3A'randomstatedata'%7D

Reasons why this is of concern:
- Requires clients to do URL decoding and JSON decoding
- Encourages unsafe JSON handling in the User-Agent flow (eval(JSON) = XSS hole)
- Breaks the simple model we've been creating in these flows.

Evan

On Fri, Jun 11, 2010 at 1:51 PM, Robert Sayre 
<say...@gmail.com<mailto:say...@gmail.com>> wrote:
+1

On Fri, Jun 11, 2010 at 1:17 AM, Naitik Shah 
<n...@daaku.org<mailto:n...@daaku.org>> wrote:
> +1
>
> On Thu, Jun 10, 2010 at 5:50 PM, Luke Shepard 
> <lshep...@facebook.com<mailto:lshep...@facebook.com>> wrote:
>>
>> +1
>>
>> On Jun 10, 2010, at 5:46 PM, Manger, James H wrote:
>>
>> > +1
>> >
>> > --
>> > James Manger
>> >
>> > ----------
>> > From: oauth-boun...@ietf.org<mailto:oauth-boun...@ietf.org> 
>> > [mailto:oauth-boun...@ietf.org<mailto:oauth-boun...@ietf.org>] On Behalf
>> > Of Eran Hammer-Lahav
>> > Sent: Friday, 11 June 2010 6:29 AM
>> > To: OAuth WG (oauth@ietf.org<mailto:oauth@ietf.org>)
>> > Subject: [OAUTH-WG] Proposal for single JSON response format
>> >
>> > - Support a single response format (including in the user-agent
>> > fragment) using JSON.
>> > _______________________________________________
>> > OAuth mailing list
>> > OAuth@ietf.org<mailto:OAuth@ietf.org>
>> > https://www.ietf.org/mailman/listinfo/oauth
>>
>> _______________________________________________
>> OAuth mailing list
>> OAuth@ietf.org<mailto:OAuth@ietf.org>
>> https://www.ietf.org/mailman/listinfo/oauth
>
>
> _______________________________________________
> OAuth mailing list
> OAuth@ietf.org<mailto:OAuth@ietf.org>
> https://www.ietf.org/mailman/listinfo/oauth
>
>

--

Robert Sayre

"I would have written a shorter letter, but I did not have the time."
_______________________________________________
OAuth mailing list
OAuth@ietf.org<mailto:OAuth@ietf.org>
https://www.ietf.org/mailman/listinfo/oauth


_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to