I am OK with that language.

On 2013-02-12, at 5:16 PM, Justin Richer <jric...@mitre.org> wrote:

> I would then request that people come up with a real example of where it 
> *won't* work. I've seen workable solutions, and even some automagic ones, on 
> several major platforms in which one would write a web server/AS: PHP, Java 
> (Spring and raw servlets), Ruby (rails and sinatra), and Node.js can all do 
> it.
> 
> I would suggest the following text (adapted from what's in -05 right now) to 
> address this:
> 
>    The Client sends an HTTP POST to the Client Registration Endpoint
>    with a content type of "application/json". The HTTP Entity Payload is
>    a JSON document consisting of a JSON object and all parameters as top-
>    level members of that JSON object.
> 
> (Would have to be tweaked for the PUT/PATCH verbs but it's effectively the 
> same.)
> 
> 
>  -- Justin
> 
> On 02/12/2013 03:07 PM, John Bradley wrote:
>> I am fine with that as long as all the IdP tools have access to the entity 
>> body in some reasonable way.   That seems like the most sensible thing.
>> 
>> However given the number of people talking about encoding it in a form to 
>> get access to it,  we should check that it works for everyone.
>> 
>> John B.
>> On 2013-02-12, at 4:59 PM, Justin Richer <jric...@mitre.org> wrote:
>> 
>>> If that's the question, then my proposal is the Content-type is 
>>> "application/json" and the HTTP Entity Body is the JSON document. No form 
>>> posts or parameter names to be had here.
>>> 
>>>  -- Justin
>>> 
>>> On 02/12/2013 02:58 PM, John Bradley wrote:
>>>> Some people apparently encode the JSON as the key in a form POST,  some 
>>>> people do a form POST with a special key and the JSON as the value. 
>>>> 
>>>> There appear to be a number of theories in the wild.   I am not an expert 
>>>> I just looked up code examples from several sources stack overflow and the 
>>>> like.
>>>> 
>>>> We probably need to get input from developers who have experience working 
>>>> with different frameworks.   I think the differences have to do with 
>>>> decoding it at the receiver.
>>>> 
>>>> We originally had registration posting JSON but we changed form encoding 
>>>> as that worked in all environments.   We just need to be sure we are not 
>>>> creating problems for people with the change back.
>>>> 
>>>> 
>>>> John B.
>>>> 
>>>> On 2013-02-12, at 4:48 PM, Tim Bray <twb...@google.com> wrote:
>>>> 
>>>>> 
>>>>> 
>>>>> On Tue, Feb 12, 2013 at 11:44 AM, John Bradley <ve7...@ve7jtb.com> wrote:
>>>>> Nat and I hashed out the pro's and cons of JSON requests.  
>>>>> 
>>>>> If we POST or PUT a JSON object we need to be specific as there rare 
>>>>> several ways to do it that may work better or worse depending on the 
>>>>> receiver.
>>>>> This needs to be looked over and one picked.
>>>>> 
>>>>> Hm?  Not following on “several ways”, I’d have thought that POSTing JSON 
>>>>> is just POSTing JSON, must be missing something. -T
>>>>>  
>>>>> 
>>>>> In the other thread about the server returning the update URI and being 
>>>>> able to encode the client in that if it needs to takes care of Servers 
>>>>> that need that info in query parameters or the path to do the routing.
>>>>> 
>>>>> The use of structure can be used to enhance readability and parsing of 
>>>>> the input, and output.
>>>>> 
>>>>> However we need to temper our urge to apply structure to everything.  
>>>>> 
>>>>> IT needs to be applied carefully otherwise we start looking like crazies.
>>>>> 
>>>>> If we do it cautiously I am in favour of JSON as input.
>>>>> 
>>>>> John B.
>>>>> 
>>>>> On 2013-02-12, at 4:32 PM, Justin Richer <jric...@mitre.org> wrote:
>>>>> 
>>>>>> Thanks for forwarding that, Mike. I'll paste in my response to Nat's 
>>>>>> concern here as well:
>>>>>> It's an increasingly well known pattern that has reasonable support on 
>>>>>> the server side. For PHP, I was able to find the above example via the 
>>>>>> top hit on Stack Overflow. In Ruby, it's a matter of something like:
>>>>>> 
>>>>>> JSON.parse(request.body.read)
>>>>>> 
>>>>>> depending on the web app framework. On Java/Spring, it's a matter of 
>>>>>> injecting the entity body as a string and handing it to a parser (Gson 
>>>>>> in this case):
>>>>>> 
>>>>>> public String doApi(@RequestBody String jsonString) { JsonObject json = 
>>>>>> new JsonParser().parse(jsonString).getAsJsonObject();
>>>>>> 
>>>>>> It's a similar read/parse setup in Node.js as well.
>>>>>> 
>>>>>> It's true that in all of these cases you don't get to make use of the 
>>>>>> routing or data binding facilities (though in Spring you can do that for 
>>>>>> simpler domain objects using a ModelBinding), so you don't get niceities 
>>>>>> like the $_POST array in PHP handed to you. This is why I don't think 
>>>>>> it's a good idea at all to switch functionality based on the contents of 
>>>>>> the JSON object. It should be a domain object only, which is what it 
>>>>>> would be in this case.
>>>>>> 
>>>>>> I think that the positives of using JSON from the client's perspective 
>>>>>> and the overall protocol design far outweigh the slightly increased 
>>>>>> implementation cost at the server.
>>>>>> 
>>>>>> 
>>>>>>  -- Justin
>>>>>> 
>>>>>> On 02/12/2013 02:11 PM, Mike Jones wrote:
>>>>>>> FYI, this issue is also being discussed as an OpenID Connect issue at 
>>>>>>> https://bitbucket.org/openid/connect/issue/747.  I think that Nat's 
>>>>>>> recent comment there bears repeating on this list:
>>>>>>> 
>>>>>>>  
>>>>>>> Nat Sakimura:
>>>>>>> 
>>>>>>>  
>>>>>>> Not so sure. For example, PHP cannot get the JSON object form 
>>>>>>> application/json POST in $_POST.
>>>>>>> 
>>>>>>>  
>>>>>>> It is OK to have a parameter like "request" that holds JSON. Then, you 
>>>>>>> can get to it from $_POST['request']. However, if you POST the JSON as 
>>>>>>> the POST body, then you would have to call a low level function in the 
>>>>>>> form of:
>>>>>>> 
>>>>>>>  
>>>>>>>  
>>>>>>> ```
>>>>>>> 
>>>>>>> #!php
>>>>>>> 
>>>>>>>  
>>>>>>> $file = file_get_contents('php://input'); $x = json_decode($file); ```
>>>>>>> 
>>>>>>>  
>>>>>>> Not that it is harder, but it is much less known. Many PHP programmers 
>>>>>>> will certainly goes "???".
>>>>>>> 
>>>>>>>  
>>>>>>> We need to check what would be the cases for other scripting languages 
>>>>>>> before making the final decision.
>>>>>>> 
>>>>>>>  
>>>>>>>                                                             -- Mike
>>>>>>> 
>>>>>>>  
>>>>>>> -----Original Message-----
>>>>>>> From: oauth-boun...@ietf.org [mailto:oauth-boun...@ietf.org] On Behalf 
>>>>>>> Of Justin Richer
>>>>>>> Sent: Monday, February 11, 2013 1:15 PM
>>>>>>> To: oauth@ietf.org
>>>>>>> Subject: [OAUTH-WG] Registration: JSON Encoded Input
>>>>>>> 
>>>>>>>  
>>>>>>> Draft -05 of OAuth Dynamic Client Registration [1] switched from a 
>>>>>>> form-encoded input that had been used by drafts -01 through -04 to a 
>>>>>>> JSON encoded input that was used originally in -00. Note that all 
>>>>>>> versions keep JSON-encoded output from all operations.
>>>>>>> 
>>>>>>>  
>>>>>>> Pro:
>>>>>>> 
>>>>>>>   - JSON gives us a rich data structure so that things such as lists, 
>>>>>>> numbers, nulls, and objects can be represented natively
>>>>>>> 
>>>>>>>   - Allows for parallelism between the input to the endpoint and output 
>>>>>>> from the endpoint, reducing possible translation errors between the two
>>>>>>> 
>>>>>>>   - JSON specifies UTF8 encoding for all strings, forms may have many 
>>>>>>> different encodings
>>>>>>> 
>>>>>>>   - JSON has minimal character escaping required for most strings, 
>>>>>>> forms require escaping for common characters such as space, slash, 
>>>>>>> comma, etc.
>>>>>>> 
>>>>>>>  
>>>>>>> Con:
>>>>>>> 
>>>>>>>   - the rest of OAuth is form-in/JSON-out
>>>>>>> 
>>>>>>>   - nothing else in OAuth requires the Client to create a JSON object, 
>>>>>>> merely to parse one
>>>>>>> 
>>>>>>>   - form-in/JSON-out is a very widely established pattern on the web 
>>>>>>> today
>>>>>>> 
>>>>>>>   - Client information (client_name, client_id, etc.) is conflated with 
>>>>>>> access information (registration_access_token, _links, expires_at, 
>>>>>>> etc.) in root level of the same JSON object, leaving the client to 
>>>>>>> decide what needs to (can?) be sent back to the server for update 
>>>>>>> operations.
>>>>>>> 
>>>>>>>  
>>>>>>>  
>>>>>>> Alternatives include any number of data encoding schemes, including 
>>>>>>> form (like the old drafts), XML, ASN.1, etc.
>>>>>>> 
>>>>>>>  
>>>>>>>  
>>>>>>>   -- Justin
>>>>>>> 
>>>>>>>  
>>>>>>> [1] http://tools.ietf.org/html/draft-ietf-oauth-dyn-reg-05
>>>>>>> 
>>>>>>> _______________________________________________
>>>>>>> 
>>>>>>> OAuth mailing list
>>>>>>> 
>>>>>>> OAuth@ietf.org
>>>>>>> 
>>>>>>> https://www.ietf.org/mailman/listinfo/oauth
>>>>>>> 
>>>>>> 
>>>>>> _______________________________________________
>>>>>> OAuth mailing list
>>>>>> OAuth@ietf.org
>>>>>> https://www.ietf.org/mailman/listinfo/oauth
>>>>> 
>>>>> 
>>>>> _______________________________________________
>>>>> OAuth mailing list
>>>>> 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