Hi all,

please find below a proposal for adding support for multiple response formats to the specification. I have taken the current version of the draft http://github.com/theRazorBlade/draft-ietf-oauth/raw/master/draft-ietf-oauth.txt and added some modifications indicated by dashed lines. Proposed changes to section 3.5.2 should be applied to 3.5.3, 3.6.1., 3.7.1., 3.7.2, and 4., too.

Basically, the idea is that clients indicate the desired format using Accept headers (default) or request parameters (User-Agent flow) and the response is delivered accordingly. The formats considered are application/json, text/xml, and application/x-www-form-urlencoded. And as suggested by Joseph, parameters are encoded straight-forward as flat JSON object or XML document, respectively.

I would appriciate
regards,
Torsten.

3.5.2.  Web Server Flow
3.5.2.2.  Client Requests Access Token

   The client obtains an access token from the authorization server by
<snip>
   secret_type
         OPTIONAL.  The access token secret type as described by
         Section 5.3.  If omitted, the authorization server will issue a
         bearer token (an access token without a matching secret) as
         described by Section 5.2.

--------
A client may indicate the desired response format using an Accept-Header specifying one of the following mime types: application/x-www-form-urlencoded, application/xml, or application/json. If not specified, the default response format is application/json.
(Alternatively, the response format could be specified by a query parameter)
--------

   For example, the client makes the following HTTPS request (line
   breaks are for display purposes only):

     POST /token HTTP/1.1
     Host: server.example.com
     Content-Type: application/x-www-form-urlencoded
--------
     Accept: application/json
--------

     type=web_server&client_id=s6BhdRkqt3&
     client_secret=gX1fBat3bV&code=i1WsRn1uB1&
     redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb


   The authorization server MUST verify that the verification code,
   client identity, client secret, and redirection URI are all valid and
   match its stored association.  If the request is valid, the
   authorization server issues an access token and delivers it to the
   client in the HTTP response body using
--------
   the mime type as requested by the client or "application/json"
--------
with a 200 status code (OK).

   The response contains the following parameters:

   access_token
         REQUIRED.  The access token issued by the authorization server.

   expires_in
         OPTIONAL.  The duration in seconds of the access token
         lifetime.

   refresh_token
         OPTIONAL.  The refresh token used to obtain new access tokens
         using the same end user access grant as described in Section 4.

   access_token_secret
         REQUIRED if requested by the client.  The corresponding access
         token secret as requested by the client.

--------
   The response format depends on the requested mime type. The
   content-type header field indicates mime type and may optionaly
   indicate charset.

   "application/json": All parameters are encoded as one flat JSON object
with one key/value pair per parameter.

   For example:

     HTTP/1.1 200 OK
     Content-Type: application/json

{ "access_token": "SlAV32hkKG", "expires_in": "3600", "refresh_token": "8xLOxBtZp8" }

"text/xml": All parameters are encoded as one XML document with the root element <token_response>. For each parameter there is a corresponding sub-element with
the parameter name containing the respectives parameters value.

   For example:

     HTTP/1.1 200 OK
     Content-Type: text/xml

<token_response>
<access_token>SlAV32hkKG
<expires_in>3600</expires_in>
<refresh_token>8xLOxBtZp8</refresh_token>
</token_response>

"application/x-www-form-urlencoded": parameters are encoded as name/value pairs
--------
   For example:

     HTTP/1.1 200 OK
     Content-Type: application/x-www-form-urlencoded

     access_token=SlAV32hkKG&expires_in=3600&refresh_token=8xLOxBtZp8


   If the request is invalid, the authorization server returns an error
   message in the HTTP response body using the
--------
   the mime type as requested by the client or "application/json"
--------
   with a 400 status code (Bad Request).

   The response contains the following parameter:

   error
         OPTIONAL.  The parameter value MUST be set to either
         "redirect_uri_mismatch" or "expired_verification_code" (case
         sensitive).

--------
   The response format depends on the requested mime type. The response
rendering follows the rules as specified above.
--------
For example:

--------
     HTTP/1.1 400 Bad Request
     Content-Type: application/json

     { "error"="expired_verification_code" }

--------
3.5.1.  User-Agent Flow
3.5.1.1.  Client Requests Authorization

   In order for the end user to grant the client access, the client
   sends the end user to the authorization server.  The client
   constructs the request URI by adding the following URI query
   parameters to the user authorization endpoint URI:
<snip>
--------
response_format
         OPTIONAL. Indicates the format used to deliver token data and
errors to the client. The parameter value MUST be set to "text/xml", "application/json", or "application/x-www-form-urlencoded". Defaults
         to "application/json" if omitted.

--------
3.5.1.1.1.  End User Grants Authorization

   If the end user authorizes the access request, the authorization
   server issues an access token and delivers it to the client by adding
   the following parameters, using the
--------
   mime type as indicated by "response_format"
--------
to the redirection URI fragment:

   access_token
         REQUIRED.  The access token.

   expires_in
         OPTIONAL.  The duration in seconds of the access token
         lifetime.

   refresh_token
         OPTIONAL.  The refresh token.

   state
         REQUIRED if the "state" parameter was present in the client
         authorization request.  Set to the exact value received from
         the client.

   access_token_secret
         REQUIRED if requested by the client.  The corresponding access
         token secret as requested by the client.
--------
The way and format parameters are added to the fragment depend on the requested mime type.

   "application/json": All parameters are encoded as one flat JSON object
with one key/value pair per parameter. This document is URL encoded and
added as parameter "oauth_response" to the fragment.

   For example, the authorization server redirects the end user's user-
   agent by sending the following HTTP response:

    HTTP/1.1 302 Found
Location: http://example.com/rd#oauth_response=%7B+%22access_token%22%3A+%22SlAV32hkKG%22%2C+%22expires_in%22%3A+%223600%22%2C+%22refresh_token%22%3A+%228xLOxBtZp8%22+%7D

"text/xml": All parameters are encoded as one XML document with the root element <token_response>. For each parameter there is a corresponding sub-element with the parameter name containing the respectives parameters value. The XML document
is URL encoded and added as parameter "oauth_response" to the fragment.

    For example:

    HTTP/1.1 302 Found
Location: http://example.com/rd#oauth_response=%3Ctoken_response%3E%3Caccess_token%3ESlAV32hkKG%3Cexpires_in%3E3600%3C%2Fexpires_in%3E%3Crefresh_token%3E8xLOxBtZp8%3C%2Frefresh_token%3E%3C%2Ftoken_response%3E

"application/x-www-form-urlencoded": All parameter are directly added as
   parameters to the redirection URI fragment.
--------
   For example:

    HTTP/1.1 302 Found
    Location: http://example.com/rd#access_token=FJQbwq9&expires_in=3600

3.5.1.1.2.  End User Denies Authorization

   If the end user denied the access request, the authorization server
   responds to the client by adding the following parameters, using the
--------
   mime type as indicated by "response_format"
--------
to the redirection URI fragment:

   error
         REQUIRED.  The parameter value MUST be set to "user_denied"
         (case sensitive).

   state
         REQUIRED if the "state" parameter was present in the client
         authorization request.  Set to the exact value received from
         the client.
--------
    The way and format parameters are added to the fragment depend on the
requested mime type and follows the same rules as specified above.
--------
   For example, the authorization server responds with the following:

     HTTP/1.1 302 Found
Location: http://example.com/rd#oauth_response=%7b+%22error%22%3d%22user%5fdenied%22%7d

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

Reply via email to