Paul Tarjan schrieb:
Yes, I'm talking about 5.2.1

For JSONP the user's browser is the client. It will make a request by executing 
some HTML like this:

<script 
src="http://graph.facebook.com/me?access_token=...&callback=jsonp_cb";></script>
<script>
function jsonp_cb(response) {
  if (response.error) {
    // error out
   return;
  }
  // do cool things
}
</script>

(this is done instead of an AJAX request, because of cross-domain restrictions).

As to Aaron's point, Google sends 3 parameters to the callback function, which 
I kind of like since the user can choose to get the code or not. Something like:

jsonp_cb({
  "error": "invalid_request",
  "error_description": "An active access token must be used to query
information about the current user."
}.
400,
'Bad Request');

which you can grab with

function jsonp_cb(response, code, status) {
}

or ignore it with

function jsonp_cb(response) {
}

But all of this is outside of the spec. I just want to make sure the spec says 
that the HTTP status code can send as 200 if the server+client need it for 
errors.
I think this can be achieved in two ways: (a) either the client tells the server using a parameter or (b) the server always responds with status code 200 in some cases. From my understanding, status code 200 is relevant for requests following the rules of section 5.1.2 only. So my sugesstion would be to go with option (b) and modify the spec to always return status code 200 for such requests. This keeps the spec simpler and preserves the behavior of requests following the rules of section 5.1.1..

regards,
Torsten.

Paul

On Aug 16, 2010, at 3:09 PM, Torsten Lodderstedt wrote:

I would like to furthermore track down the relevant use cases. Assuming you are 
referring to section 5.2.1, how does your client send the access token to the 
resource server? I'm asking because I think error handling for URI query 
parameters, Body parameters and Authorization headers could be handled 
differently. For URI query parameters and Body parameters, returning the error 
code in the payload instead of the status code would be acceptable from my 
point of view since authentication is also pushed to the application level. In 
contrast when using HTTP authentication, 40(x) status codes together with 
WWW-Authenticate are a must have.

Would such a differentiation help you?

regards,
Torsten.

John Panzer schrieb:
Is there ever a case other than jsonp where this is necessary?

On Monday, August 16, 2010, Aaron Parecki <[email protected]> wrote:
Excellent point. Would it be worth it to include a new error_code
parameter in the JSON response so that clients have a way to get the
http status code from the data available in the jsonp response?

The response in this case might look like this
jsonp_cb({
   "error_code": 400,
  "error": "invalid_request",
  "error_description": "An active access token must be used to query
information about the current user."
});

Aaron


On Sun, Aug 15, 2010 at 10:16 PM, Luke Shepard <[email protected]> wrote:


+1

On Aug 13, 2010, at 2:31 PM, Paul Tarjan wrote:

Hi Fellow OAuthers,

If a resource wants to return data via the JSONP mechanism then it MUST return 
an HTTP 200 error code, or else the browser won't actually call the callback. 
The OAuth spec as it stands requires HTTP 400 or 401 or 403 on errors which 
won't ever tell the client that an error happens.

For example:

GET /me?callback=jsonp_cb HTTP/1.1
Host: graph.facebook.com <http://graph.facebook.com/>

HTTP/1.1 200 OK
Content-Type: text/javascript; charset=UTF-8
Content-Length: 152

jsonp_cb({   "error": "invalid_request",   "error_description": "An active access 
token must be used to query information about the current user."
});
would never get sent to the browser if we obeyed the spec and sent it as an 
HTTP 400.

---
So, I recommend we add wording to 5.2.1 like:

If the protected resource is issuing a response that requires a different HTTP 
status code than the one specified (for example, JSONP), then it MAY use an 
alternate HTTP code. The server should make it clear which parameters trigger 
this mode so that clients know not to rely on the HTTP status code for error 
detection.


Paul_______________________________________________
OAuth mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/oauth


_______________________________________________
OAuth mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/oauth



_______________________________________________
OAuth mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/oauth


_______________________________________________
OAuth mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to