Re: [OAUTH-WG] treatment of client_id for authentication and identification

Eran Hammer-Lahav <> Thu, 28 July 2011 15:20 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 1AED121F8BF2 for <>; Thu, 28 Jul 2011 08:20:14 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -2.56
X-Spam-Status: No, score=-2.56 tagged_above=-999 required=5 tests=[AWL=0.038, BAYES_00=-2.599, HTML_MESSAGE=0.001]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id reG65o6Uw03U for <>; Thu, 28 Jul 2011 08:20:13 -0700 (PDT)
Received: from ( []) by (Postfix) with SMTP id 75DEC21F8CC5 for <>; Thu, 28 Jul 2011 08:20:12 -0700 (PDT)
Received: (qmail 21397 invoked from network); 28 Jul 2011 15:20:11 -0000
Received: from unknown (HELO ( by with SMTP; 28 Jul 2011 15:20:11 -0000
Received: from P3PW5EX1MB01.EX1.SECURESERVER.NET ([]) by P3PW5EX1HT001.EX1.SECURESERVER.NET ([]) with mapi; Thu, 28 Jul 2011 08:20:08 -0700
From: Eran Hammer-Lahav <>
To: Torsten Lodderstedt <>
Date: Thu, 28 Jul 2011 08:20:02 -0700
Thread-Topic: [OAUTH-WG] treatment of client_id for authentication and identification
Thread-Index: AcxNOdUeIMFy2c1zQsihyPH8dBcq7Q==
Message-ID: <>
In-Reply-To: <>
Accept-Language: en-US
Content-Language: en-US
user-agent: Microsoft-MacOutlook/
acceptlanguage: en-US
Content-Type: multipart/alternative; boundary="_000_CA56CA211758Beranhueniversecom_"
MIME-Version: 1.0
Cc: oauth <>
Subject: Re: [OAUTH-WG] treatment of client_id for authentication and identification
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: OAUTH WG <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Thu, 28 Jul 2011 15:20:14 -0000

-16 was a failed attempt to accomplish this separation of authentication and identification. It didn't work. When working on –17 I had about 5 messages in my queue with questions and issues regarding the duplication of client identifier information between Basic and the parameter, the fact that the parameter was now required where previously it was optional or even not recommended, and overall confusion.

My goal with –16 was to simplify things without making normative changes and it didn't work. In –17 on I fixed it by reverting the change and expanding the concept of the client identifier. When I had to decide how to fix the issues introduced by this change in –16, I came up with the list of questions I asked you below and decided that it was just too complicated for practically no gain.

You are free, of course, to try and suggest alternative language. My suggestion is to simply allow client_secret to be omitted when there is no secret assigned, and I can also add a short note that public clients may use the client_id for the purpose of identification with the token endpoint. This will give full endorsement to the practice without making the rest of the protocol any more complex.


From: Torsten Lodderstedt <<>>
Date: Thu, 28 Jul 2011 07:24:37 -0700
To: Eran Hammer-lahav <<>>
Cc: Brian Campbell <<>>, oauth <<>>
Subject: Re: [OAUTH-WG] treatment of client_id for authentication and identification

the client_id parameter had been added to the token endpoint in -16. As far as I remember, the reason was to properly separate client identification and authentication in order to support further client authentication methods.

quote from ""<>:
"The goal is a cleaner protocol design. The protocol design separates client identification as part of the flow (URI parameter) and originator authentication. While the client_id parameter is required, the authentication can be omitted (unauthenticated access) or performed using other authentication mechanisms. And such mechanisms not neccessarily use client_id's. Moreover, the spec just says, "The authorization server MUST ensure the two identifiers belong to the same client". So the client_id's (request parameter and header) may differ. "

You removed the parameter in -17, can you please explain why?


Am 27.07.2011 18:45, schrieb Eran Hammer-Lahav:
There is not clean way of adding it.

First where? In each flow of the token endpoint or just in 3.2? Then how is it defined? Optional? Required for public clients? How does it work alongside authentication? If you use client_password or Basic then it becomes authentication but otherwise identification? What about duplication between Basic and the parameter? It also means adding a new section discussing client authentication vs identification which is currently implicit.

I strongly believe that it is better to have a simple model as the one already defined in –20 and let other use case find their way around it instead of producing a confusing document that is trying to hard to solve every possible combination.

As I said before, we can tweak the definition of client_secret to make it more esthetically pleasing (the server doesn't mind having an empty parameter included, just people), but that's as far am I'm (as wg member) willing to support, especially at this point.


From: Torsten Lodderstedt <<>>
Date: Wed, 27 Jul 2011 15:21:16 -0700
To: Brian Campbell <<>>
Cc: Eran Hammer-lahav <<>>, oauth <<>>
Subject: Re: [OAUTH-WG] treatment of client_id for authentication and identification

I personally think that would be more confusing than just adding the
client_id parameter to the token endpoint request (independent of client
authentication credentials).

Am 27.07.2011 18:17, schrieb Brian Campbell:
I think that would be helpful, thanks.

On Wed, Jul 27, 2011 at 12:43 PM, Eran Hammer-Lahav<<>>  wrote:
If you want, we can tweak section 2.4.1 to make client_secret optional if
the secret is the empty string. That will give you exactly what you want
without making the document any more confusing.