> If the server issues clients with password credentials it MUST support HTTP 
> Basic (this is the flip side of 'the client MAY use HTTP Basic') and should 
> only support the client_secret parameter if it has clients incapable of using 
> HTTP Basic.

Very well. Without changing the meaning, I think the community would
be well served by appending paragraph 2 of Section 2.3 as follows:
----
   Confidential clients are typically issued (or establish) a set of
   client credentials used for authenticating with the authorization
   server (e.g. password, public/private key pair).  If clients are
   issued passwords, the authorization server MUST support the HTTP
   Basic authentication scheme as defined in [RFC2617] and described
   by Section 2.3.1.
----
This helps to communicate that authorization servers are only required
to support HTTP Basic if they issue client passwords.

Andre

On Tue, Sep 20, 2011 at 3:20 PM, Eran Hammer-Lahav <e...@hueniverse.com> wrote:
> If the server issues clients with password credentials it MUST support HTTP 
> Basic (this is the flip side of 'the client MAY use HTTP Basic') and should 
> only support the client_secret parameter if it has clients incapable of using 
> HTTP Basic.
>
> This language has been tweaked to reach a delicate balance. I'm not inclined 
> to touch it.
>
> EHL
>
>> -----Original Message-----
>> From: oauth-boun...@ietf.org [mailto:oauth-boun...@ietf.org] On Behalf
>> Of André DeMarre
>> Sent: Wednesday, September 14, 2011 5:25 PM
>> To: OAuth WG
>> Subject: Re: [OAUTH-WG] Fwd: secdir review of draft-ietf-oauth-v2
>>
>> I agree that stating "Clients in possession of a client password MAY use the
>> HTTP Basic authentication scheme" [Section 2.3.1 paragraph 1] implies that
>> authorization servers MUST support HTTP basic authentication, but such is
>> never asserted. Instead, it says "The authorization server MAY accept any
>> form of client authentication meeting its security requirements." [Section 
>> 2.3
>> paragraph 1] This is somewhat contradictory.
>>
>> I can understand that requiring a specific method of client authentication is
>> desirable for maximum interoperability, but this would be problematic for
>> authorization server implementations that wish to enforce stronger security
>> than HTTP Basic. Such implementations would be forced to deviate from the
>> specification. In particular, implementations which choose MAC access
>> tokens instead of Bearer tokens may wish to add a layer of security to
>> defend against improperly configured TLS connections, or to protect clients
>> who connect to the wrong server.
>> [http://hueniverse.com/2010/09/oauth-bearer-tokens-are-a-terrible-idea/]
>> Such implementations will also find HTTP Basic undesirable for client
>> authentication. To require a form of client authentication that isn't 
>> universally
>> sufficient could become a source of criticism and deter adoption of OAuth
>> 2.0.
>>
>> I think the best solution is to clarify section 2.3.1 as follows:
>> ---
>> Clients in possession of client credentials MAY use any form of 
>> authentication
>> scheme supported by the authorization server.
>> ---
>> And then follow with the existing example that demonstrates HTTP Basic.
>>
>> Regards,
>> Andre DeMarre
>>
>> On Tue, Sep 13, 2011 at 4:52 PM, Greg Brail <g...@apigee.com> wrote:
>> > I would like to add my support to the comments below on section 2.3,
>> > specifically 2.3.1.
>> >
>> > It is clear to me from reading section 2.3 that clients MAY use HTTP
>> > basic, or they MAY include client_id and client_secret in the request
>> > body -- however, the latter is not recommended.
>> >
>> > It is not clear what the authorization server MUST support. IMHO, that
>> > leads us to a situation in which there is no universally-agreed set of
>> > authentication technology that all programmers can assume is going to
>> > work, which means that interoperability will be difficult as some
>> > authorization servers will support Basic, others will support the
>> > request body, and others will do neither in favor of something else.
>> >
>> > I would prefer that we make both HTTP basic AND the request body
>> > mechanisms in this section both required on the server side, thus
>> > giving the client the option of choosing one or the other. That would
>> > mean re-writing the beginning of section 2.3.1 as shown below.
>> >
>> > If I have missed other discussion on this topic I apologize. If there
>> > is already consensus to make the "message body" authentication
>> > optional rather than required for the authorization SERVER then I
>> > would still recommend that we make HTTP Basic a MUST in order to allow
>> > easier interop.
>> >
>> > Proposed change to 2.3.1:
>> >
>> > ----
>> >
>> > The authorization server MUST support the HTTP Basic authentication
>> > scheme as defined in [RFC2617] as a way to identify clients. The
>> > client identifier is used as the username, and the client password is
>> > used as the password.
>> >
>> > For example (extra line breaks are for display purposes only):
>> >
>> >   Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
>> >
>> > Alternatively, the authorization server MUST also allow the client to
>> > include the client credentials in the request body using the following
>> > parameters:
>> >
>> >   client_id
>> >         REQUIRED.  The client identifier issued to the client during
>> >         the registration process described by Section 2.2.
>> >   client_secret
>> >         REQUIRED.  The client secret.  The client MAY omit the
>> >         parameter if the client secret is an empty string.
>> >
>> > Clients in possession of a client password MAY use either mechanism in
>> > order to authenticate with the authorization server. However,
>> > including the client credentials in the request body using the two
>> > parameters is NOT RECOMMENDED, and should be limited to clients unable
>> > to directly utilize the HTTP Basic authentication scheme (or other
>> > password-based HTTP authentication schemes).
>> >
>> >  (Rest of section remains as-is with the paragraph beginning "For
>> > example...")
>> >
>> > Gregory Brail   |   Technology   |   Apigee   |   +1-650-937-9302
>> >
>> > On Mon, Sep 12, 2011 at 2:02 PM, Stephen Farrell
>> > <stephen.farr...@cs.tcd.ie> wrote:
>> >>
>> >> FYI, probably best for the WG to see/process these secdir comments as
>> >> appropriate. I've not read 'em in detail myself yet, so as Leif says,
>> >> feel free to react as appropriate.
>> >>
>> >> S.
>> >>
>> >> PS: Thanks Leif for reviewing this.
>> >>
>> >> -------- Original Message --------
>> >> Subject: secdir review of draft-ietf-oauth-v2
>> >> Date: Mon, 12 Sep 2011 20:31:06 +0200
>> >> From: Leif Johansson <le...@sunet.se>
>> >> To: draft-ietf-oauth...@tools.ietf.org, sec...@ietf.org,
>> >> i...@ietf.org
>> >>
>> >> -----BEGIN PGP SIGNED MESSAGE-----
>> >> Hash: SHA1
>> >>
>> >>
>> >> Security review of OAUTH 2.0 core: draft-ietf-oauth-v2-21
>> >>
>> >> Do not be alarmed.  I have reviewed this document as part of the
>> >> security directorate's ongoing effort to review all IETF documents
>> >> being processed by the IESG.  These comments were written primarily
>> >> for the benefit of the security area directors.  Document editors and
>> >> WG chairs should treat these comments just like any other last call
>> >> comments.
>> >>
>> >> This review is rather lengthy. This should not be interpreted as
>> >> anything beyond a desire to do a thorough review.
>> >>
>> >> It may well be that I have stumbled on things already covered on the
>> >> list. If so I apologize and ask that you silently ignore such bits.
>> >> Also I have included things that are not directly security related
>> >> but that I found problematic for other reasons.
>> >>
>> >> The notes are presented in the order I wrote them down.
>> >>
>> >> ** General observations:
>> >>
>> >> POST and/or GET
>> >>
>> >> Examples are sometimes POST and sometimes GET. In many cases it is
>> >> not clear to me from the surrounding text if both POST and GET are
>> >> allowed or if only one is mandated. Illustrating with both a GET
>> >> _and_ POST example in the cases where both are supported would help
>> >> or make the method explicit in the text before the example.
>> >>
>> >> The P-word
>> >>
>> >> The term 'password' is sprinkled throughout the document, sometimes
>> >> as in "client password" or "resource owner password credentials" and
>> >> I suspect that sometimes it is password as in 'an example of a
>> >> credential type' and in other cases it is password as in 'plain old
>> >> password'. This needs to be cleared up throughout (I've included some
>> >> examples below).
>> >>
>> >> Normative Language
>> >>
>> >> I've often found myself wanting more normative language often to
>> >> replace existing but less precise text. I've called out some
>> >> important cases below.
>> >>
>> >> Unknown parameters
>> >>
>> >> The sentence "The client SHOULD ignore unrecognized response
>> parameters"
>> >> occurs in several places. First of all I would argue that this has to
>> >> be a MUST if you want to be able to guarantee extensibility. Secondly
>> >> there are some error responses that are triggered by unsupported
>> >> request parameters. This seems like an inconsistency.
>> >>
>> >> ** Specifics
>> >>
>> >> 1.1 Roles
>> >>
>> >> Forward references to the sections where the roles are defined would
>> >> improve readability.
>> >>
>> >> As an illustration of an alternative model for the authorization
>> >> server maybe an informative reference to UMA would be illustrative
>> here.
>> >>
>> >> 1.2 Protocol Flow
>> >>
>> >> (A) talks about 'an intermediary such as an authorization server.' it
>> >> isn't clear it me if this refers to a separate authorization server
>> >> or if it is the same authorization server that is referenced in (B).
>> >>
>> >> 1.3.3 Resource Owner Password Credentials
>> >>
>> >> When I first read this I thought - why not talk about Resource Owner
>> >> Credentials - in fact there is a parenthesis there "(e.g a username
>> >> and password)" that seems to indicate that other credentials could be
>> >> supported.
>> >>
>> >> This needs to be cleared up. Either its username and password and
>> >> nothing else or there is a way to support things like Negotiate or
>> >> X.509-based credentials in which case it should really be Resource
>> >> Owner Credentials with no reference to passwords other than as as an
>> >> example of one possible credential type.
>> >>
>> >> 1.4 Access Token
>> >>
>> >> first paragraph: "The string is usually opaque". This should be
>> >> reformulated as normative language. In fact I would have liked
>> >> guidance on generating those tokens (which has been brought up on the
>> >> list) possibly as part of an implementation-guide.
>> >>
>> >> 1.5 Refresh Token
>> >>
>> >> Why is the refresh token not simply treated as an access token for
>> >> the access token resource in the authorization server? This would
>> >> seem to simplify the model a bit by removing a type of token whose
>> >> semantic (at least to this reviewer) is a duplication of a normal
>> >> access token for a particular type of resource.
>> >>
>> >> Also in the first paragraph: "(access tokens may have a shorter
>> >> lifetime and fewer permissions". Why not try to write normative
>> >> language here - there are security implications of allowing a refresh
>> >> token to get more permissions (say) than the original access token.
>> >>
>> >> 2.1 Client types
>> >>
>> >> I find the terminology public/confidential somewhat counter-intuitive.
>> >> An app you have on your personal device is 'public' while a shared
>> >> cloud service is 'confidential'...hmm...
>> >>
>> >> This section also lacks normative language which isn't good. There
>> >> should be language defining the behavior of public and confidential
>> >> client aswell as the three profiles.
>> >>
>> >> For instance under native application we have "It is assumed that any
>> >> client authentication credentials included in the application can be
>> >> extracted". This should really be normative language. Some of what I
>> >> am looking for can be found in section 2.3 but it isn't clear to me
>> >> that it covers the definition of the profiles.
>> >>
>> >> 2.3.1 Client Password
>> >>
>> >> There is also some confusion here about what the client must
>> >> implement and what the server must implement wrt the use of
>> >> client_id. I read the text as trying to say that Servers SHOULD
>> >> support both and clients SHOULD only do Basic.
>> >>
>> >> This section also seems to have been the product of a partial
>> >> s/password/credential/g operation. Either OAUTH is only meant to use
>> >> Basic and passwords or we want to cover all/most HTTP authentication
>> >> methods and credentials and then section 2.3.2 (which feels like an
>> >> afterthought) needs to get folded into 2.3.1 and the normative
>> >> language (and examples!) need some work to cover at least X.509s and
>> >> perhaps even Negotiate.
>> >>
>> >> Personally I would try to fold 2.3.1 and 2.3.2 into one section and
>> >> say that servers MUST support Basic and client_id+client_password.
>> >> Servers MAY support any HTTP authentication method with a mapping to
>> client_id.
>> >> If a client supports username+passwords it SHOULD do Basic and if it
>> >> supports other HTTP authentication methods it MUST NOT use
>> >> client_password for anything and MUST follow normal HTTP
>> >> authentication method negotiation.
>> >>
>> >> Finally, everywhere there is negotiation there must imho be some
>> >> mention/discussion/protection of downgrade attacks.
>> >>
>> >> 3.1 Authorization Endpoints
>> >>
>> >> 6th paragraph: "The authorization server SHOULD ignore unrecognized
>> >> request parameters". This formulation returns in several places in
>> >> the document and I don't understand why it isn't a MUST - after all
>> >> doesn't extensibility depend on this?
>> >>
>> >> 3.1.1 Response Type
>> >>
>> >> The response_type parameter is REQURED but its absence SHOULD result
>> >> in an error. Why not MUST?
>> >>
>> >> 3.1.2 Redirection Endpoint
>> >>
>> >> There should be a clear normative specification for how to  match
>> >> endpoints. There are traces of this in various parts of the document
>> >> when matching is discussed. I recommend making a concise definition
>> >> in one place (namely here) and referencing this throughout. Since
>> >> this comparison has security implications it should be a priority for
>> >> the specification to be air-tight.
>> >>
>> >> 3.1.2.2 Registration Requirements
>> >>
>> >> "(the client MAY use the state request parameter to achieve
>> >> per-request customization)". Doesn't this overload its use for CSRF-
>> protection?
>> >>
>> >> 3.1.2.4 Invalid Endpoint
>> >>
>> >> "The authorization server SHOULD NOT redirect...". Why isn't this a
>> >> MUST NOT?
>> >>
>> >> 3.1.2.5 Endpoint Content
>> >>
>> >> This section basically seems to say "Serve with server-side code not
>> >> with html or client-side code". If this is the case then I suggest
>> >> reformulate to say precisely that using normative language.
>> >>
>> >> The use of the word "script" could perhaps also be made less
>> >> ambiguous since in this case it could refer to both server-side code
>> >> aswell as in-browser code.
>> >>
>> >> 3.2.1 Client Authentication
>> >>
>> >> The phrase "clients issued client credentials" could be rephrased to
>> >> make less violence on English - perhaps "clients that have been
>> >> issued with client credentials", unless that is not the intended
>> >> meaning in which case I argue for something easier to understand ;-)
>> >>
>> >> The second bullet: Using client credentials more often also exposes
>> >> them more which might be worth mentioning aswell.
>> >>
>> >> 4. Obtaining Authorization
>> >>
>> >> Perhaps not critical but the term 'password credentials' occurs in
>> >> the first paragraph and this doesn't seem compatible with resource
>> >> owner authentication being out of scope. It could just be that it
>> >> should read 'resource owner credentials' but it could also signal an
>> >> underlying assumption about username and password being used for
>> >> resource owner authentication. In either case I thing its best to
>> >> avoid the use of the word 'password' to avoid any confusion.
>> >>
>> >> 4.1 Authorization Code
>> >>
>> >> (C) - "using the redirection URI provided earlier" should perhaps
>> >> read "using the redirection URI provided earlier or associated with
>> >> the client in client registration"
>> >>
>> >>
>> >> 4.1.1 and 4.1.2 Authorization Request/Authorization Response
>> >>
>> >> The redirect_uri is listed as OPTIONAL with a reference to 3.1.2 but
>> >> there is no mention in 4.1.2 how to handle the case when the
>> >> redirect_uri is not present. I believe the assumption is that the
>> >> redirect_uri is either resent or part of client registration but that
>> >> needs to be made explicit in that case.
>> >>
>> >> This may apply to other uses of the redirect_uri parameter eg in 4.2.1.
>> >>
>> >> Furthermore in 4.2.2 "code" I suggest the following re-formulatation
>> >> of the last sentence: "The client MUST NOT use an authorization code
>> >> for more than one request. If an authorization code is re-used, the
>> >> authorization server should treat that as a replay attack and SHOULD
>> >> revoke all tokens associated with the client." (i.e loose the "attempt"
>> >> bit which carries no real meaning)
>> >>
>> >> Also note that this is potentially a DOS attack should a single authz
>> >> code leak.
>> >>
>> >> 4.1.2.1 Error Response
>> >>
>> >> First paragraph, last sentence "and MUST NOT automatically redirect".
>> >> In the light of how willing users normally are to click on links
>> >> presented to them I would strengthen this to "MUST prevent the user
>> >> from following the redirect URI"
>> >>
>> >> In the definition of the invalid_request parameter I don't understand
>> >> how unsupported parameters can generate an error since endpoints
>> >> should ignore unsupported parameters (in order to support extensibility).
>> >>
>> >> 4.1.3 Access Token Request
>> >>
>> >> "require client authentication for confidential clients or for any
>> >> client issued client credentials (or with other authentication
>> >> requirements)"
>> >>
>> >> This text seems unnecessarily convoluted. Isn't enough to say that if
>> >> you have issued credentials to a client you MUST require
>> >> authentication from that client? This applies equally to the other
>> >> sections where client authentication is an issue (eg 4.3.2).
>> >>
>> >> Also cf my comment on 3.1.2 for the discussion of matching
>> >> redirect_uri in the last bullet: ".. and that their values are
>> >> identical". Is this really meant to mean identical?
>> >>
>> >> 4.2 Implicit Grant
>> >>
>> >> The parenthesis "(it does not support the issuance of refresh tokens)"
>> >> sounds like it should really be normative language, "refresh tokens
>> >> MUST NOT be issues for implicit grant" because afaiu you could easily
>> >> extend "fragment-transport" to include a refresh-token, so it isn't a
>> >> technically motivated constraint, right?
>> >>
>> >> In (D) I would like to have a normative reference to a document that
>> >> specifies browser behavior for URL fragments since this is a critical
>> >> security dependency for this grant type.
>> >>
>> >> 4.4 Client Credentials
>> >>
>> >> I think the text should note that this model effectively implies that
>> >> the client is able to impersonate all users which has the potential
>> >> for worse security problems than if the client has access to
>> >> individual user passwords.
>> >>
>> >> 6 Refreshing an Access Token
>> >>
>> >> scope - The term "lesser than" is intuitive but imprecise. I suggest
>> >> "MUST NOT include any scope not originally granted by the resource
>> owner".
>> >>
>> >> 7.1 and 8.1 Access Token Types
>> >>
>> >> The section 7.1 lists two definitions of access token types and
>> >> provides a couple of examples but doesn't provide any constraints on
>> >> future development of access tokens except in 8.1 where it is implied
>> >> that not all access token types would be associated with HTTP
>> >> authentication mechanisms. Are there really no constraints on access
>> >> token types that should be captured?
>> >>
>> >> 10.6 Authorization Code Redirection URI Manipulation
>> >>
>> >> Suggest replace the word 'familiar' with 'trusted' in the first
>> >> sentence of the second paragraph. The notion of trust opens up
>> >> several boat loads of worm but it is the correct term here I think.
>> >>
>> >> In the third paragraph "the same as" wrt redirection URIs occur and
>> >> this needs to be defined (cf comments on 3.1.2 above).
>> >>
>> >> Finally "The authorization server MUST require public clients and
>> >> SHOULD require confidential clients to register their redirection
>> >> URI". I am missing a discussion of why the two types of client differ
>> >> wrt this attack vector.
>> >>
>> >> 10.10 Credentials Guessing Attack
>> >>
>> >> I found myself wanting implementation advice for how to generate good
>> >> tokens at this point. This has been raised on the list too. The same
>> >> goes for how to generate good CSRF cookies where the "(eg a hash of
>> >> the session cookie..." feels like it is implementation advice
>> >> yearning to come out of the closet.
>> >>
>> >>
>> >> Thats it.
>> >>
>> >>        Cheers Leif
>> >> -----BEGIN PGP SIGNATURE-----
>> >> Version: GnuPG v1.4.11 (GNU/Linux)
>> >> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
>> >>
>> >>
>> iEYEARECAAYFAk5uT+YACgkQ8Jx8FtbMZncXQgCfZmTlzuESq0plfpkceQN1ont
>> E
>> >> a1QAoIEcg06GYK+6Fn4y40cTL1jQ+KmS
>> >> =ox42
>> >> -----END PGP SIGNATURE-----
>> >>
>> >> _______________________________________________
>> >> 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