Overall, I'm very happy with this draft. Excellent work, Eran!

A couple of comments though:

section 1.4: "An authorization grant is a general term used to describe the
intermediate credentials ..."

Since passwords represent authorization grants as well, I would suggest to adjust the wording to „intermediate or permanent“

section 1.4.3: "Unlike
the HTTP Basic authentication scheme defined in [RFC2617], this grant
type eliminates the need for the client to store the resource-owner
credentials for future use"

I would suggest to add "if used in combination with refresh tokens."

section 1.4.4:

"The client credentials can be used as an authorization grant ..., or to protected resources previously arranged
with the authorization server."

Does this mean, the client is not the resource owner but gets access because of an existing authorization? How does this differ from an implicit grant?

"Client credentials are used as an
authorization grant typically when the client is acting on its own
behalf (the client is also the resource owner)."

What are the alternatives? I would suggest to remove „typically“.

section 2.1:

4. paragraph: "If the response does not include an access token, the authorization server SHOULD require TLS 1.2 and any additional transport-layer mechanism meeting its security requirements."

Why only „SHOULD“ and not "MUST"? Otherwise, alternative means for preventing abuse of the response parameters MUST be required, e.g. client authentication for authorization code exchange.

Moreover, this is about the redirect_uri, isn't it? What about the endpoint's security itself, i.e. requests to this endpoint?

section 2.1.1:

3. paragraph: "The authorization server SHOULD require the client to pre-register
their redirection URI or at least certain components such as the
scheme, host, port and path."

Pre-registered redirect_uri facilitate client authentication while tying a client to a certain deployment. Although this is typical practice nowdays I expect this to change if OAuth really gains traction for standard client software, such as mail clients. Proposal: Should by MAY in my opinion + some explanation on the purpose of redirect_uri registration.

section 2.2:

4. paragraph: "The token endpoint requires client authentication as described in Section 3."

That's to restrictive, probably client identification but not authentication. Otherwise, this endpoint cannot be used for most native apps.

section 3:
"Client credentials are used to identify and authenticate the client."

I think it would be helpful for the reader to explain the purposes client identitification and authentication serve in OAuth. I see the following use cases (more text can be found in http://tools.ietf.org/html/draft-lodderstedt-oauth-security-00#section-3.8):

In the context of delegated authorization, client identity is used to:
- Establish trust to the client and display relevant registration information to a user when requesting consent for authorization
- Authorize clients for certain authorization server features
- Collate associated request to the same originator (e.g. a particular end-user authorization process and the corresponding request on the tokens endpoint to exchange the authorization code for tokens)

Moreover, client credentials can also be used to authenticate the client as a resource owner (see client credentials grant type)

Requirements regarding the client security policy and the data associated with the client identity may vary among the purposes.

"The authorization server SHOULD NOT issue client credentials to clients incapable of keeping
their secrets confidential."

I would suggest to add some explanation here. Proposal "For example, the same client credentials should not be used for multiple installations of the same software, e.g. all instances of the same native app running on different PCs or smartphones."

section 3.2:
"In addition, the
authorization server MAY allow unauthenticated access token requests
when the client identity does not matter (e.g. anonymous client) or
when the client identity is established via other means."

I would suggest to move this sentence after the BASIC authentication example.

section 4.1:

In my opinion, the introduction of this section over-emphasizes the aspect of client secrets & authentication while neglecting the other properties of the authorization code flow. Moreover, it encourages the impression this flow can only be used by clients equipped with a secret. This is wrong as this flow should be usable by clients w/o client secrets as well because it offers unique properties beside its aibility to support client authentication. In my opinion these are:

- user identity and credentials are not exposed to client (in contrast to resource owner password grant) - user authentication and consent controlled by authorization server (in contrast to resource owner password grant) - flow is especially suited for clients which are web applications (in contrast to implicit grant)
- refresh token issuance (in contrast to implicit grant)
- client credentials and tokens are sent over protected, direct communication channels between client and authorization server (no browser caches and HTTP referers involved)
- aibility to authenticate clients (for completeness)

The introduction should explain all properties of the flow and offer some guidance when and how to use the flow.

section 4.1.3:
Why is the name of the response type „code“ whereas the name of the grant type is „authorization_code“?

"redirect_uri" should only be required if it was an input parameter to the corresponding authz request.

last paragraph: "Validate the client credentials and ensure they match the authorization code." should be "Validate the client credentials (if present) and ensure they match the authorization code." (see also: http://www.mail-archive.com/oauth@ietf.org/msg04540.html)

section 4.1.4:

"If the request failed due to failed client authentication or is invalid" - Some words missing here?

example response: The JSON document contains a field "example_parameter":"example-value". Some copy and paste remainings? - The same holds true for other example JSON documents.

section 4.2.:

I'm struggeling with the name "implicit grant". Why not just stick with "User Agent Flow"? It has been designed for that kind of app.

As already mentioned for section 4.1., also this introduction puts to much emphasize on the client secret story. I don't think this was the original driver of its development. I would expect the intro to focus on the functional properties of the flow:

As I understand, it has been designed with JavaScript clients in mind, which due to the same origin policy, are unable to send requests directly to an authorization server outside of its origin. So instead of obtaining tokens through a POST request (via authz code), the access token is delivered directly via the redirect URI. In order to reduce the exposure of the token (and because it is sufficient), the access token is sent via the fragment. As a consequence of the design this flow does not support client authentication via secrets. The client's identity can nevertheless be validated using pre-registered redirect_uri's.

This flow cannot be used with web applications. And as long as the flow does not support refresh tokens, the same holds true for native apps (see also http://tools.ietf.org/html/draft-zeltsan-oauth-use-cases-01). So please remove "or native applications" from the text (see http://www.ietf.org/mail-archive/web/oauth/current/msg05551.html).

section 4.3:

2. paragraph: I suggest to add "It is even possible to migrate from stored credentials to stored refresh tokens. Leakage of the later would have less impact."

Figure 5/ Step C) I suggest to add ", and optionally a refresh token."

section 4.3.3

"If the access token request is valid and authorized, the
authorization server issues an access token and optional refresh
token as described in Section 5.1."

How is determined and by whom whether a refresh token is being issued? Since this is not an interactive flow, the authorization server cannot ask the resource owner.

section 6:
"The authorization server MUST validate the client credentials, ..." should be "The authorization server MUST validate the client credentials (if present), ..."

regards,
Torsten.

Am 02.03.2011 08:32, schrieb Hannes Tschofenig:
This is a Last Call for comments on

http://www.ietf.org/id/draft-ietf-oauth-v2-13.txt

Please have your comments in no later than March 16.

Do remember to send a note in if you have read the document and have no
other comments other than "its ready to go" - we need those as much as we need "I 
found a problem".

Thanks!
Hannes&  Blaine

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

Reply via email to