I can't see the purpose of "generated secret" by the client. I fear this is 
going to lead down the same confusing path as the last thread on auth codes.

Essentially what you're asking for is a unique session ID per grant request.  
If TLS is required across all connections to protect the generated secret/ID, 
then this secret serves no security purpose. The token (and auth code 
represented by it during the first leg) serves as the session ID anyway, so the 
client-generated secret is redundant. Additionally you have to deal with the 
provider rejecting secrets if they are not unique.

Such a secret would provide no identity guarantee beyond the "same session" 
guarantee provided the token. Any application can use an existing client ID, 
make up a secret, and authenticate. The server knows nothing more about the 
identity of the client.  Identity and secrets must be established outside the 
OAuth handshake - at the same point where application identity data (icon, 
name, owner) is managed.


On Apr 8, 2011, at 9:49 AM, Phil Hunt wrote:

> I am assuming the outbound requests are secured by TLS, but for various 
> reasons the return path (e.g. the redirect) might not be. Thus, one 
> restriction would be that the server never returns the code to the client.
> 
> Thus, you could submit a secret simply for the purpose of verifying the same 
> specific requestor for each operation.
> 
> Phil
> phil.h...@oracle.com
> 
> 
> 
> 
> On 2011-04-08, at 9:36 AM, tors...@lodderstedt.net wrote:
> 
>> This would be another possible standard option. As you pointed out, it would 
>> help to detect authz code theft even for native apps. It would not help wrt 
>> client authorization since there are no properties associated with the new 
>> credential.
>> 
>> The key is: how does the authz server get to know this secret? As the 
>> redirects are not fully protected against leaks (history, referers) I would 
>> not pass it in as a parameter to the authz request. 
>> 
>> Regards,
>> Torsten.
>> Gesendet mit BlackBerry® Webmail von Telekom Deutschland  
>> 
>> -----Original Message-----
>> From: Phil Hunt <phil.h...@oracle.com>
>> Date: Fri, 8 Apr 2011 09:22:18 
>> To: Skylar Woodward<sky...@kiva.org>
>> Cc: Torsten Lodderstedt<tors...@lodderstedt.net>; Kris 
>> Selden<kris.sel...@gmail.com>; Zeltsan, Zachary 
>> \(Zachary\)<zachary.zelt...@alcatel-lucent.com>; 
>> oauth@ietf.org<oauth@ietf.org>
>> Subject: Re: [OAUTH-WG] Flowchart for legs of OAuth
>> 
>> Why not have the client app generate a random text string to be used as a 
>> request secret.  The random text string would be matched during all 
>> subsequent requests by the client surrounding a particular authorization.  
>> Assuming the endpoints all require TLS for request side operations it would 
>> prevent interception issues and bind the authz code to a particular client 
>> instance even when matching client credentials are used by an intercepting 
>> hacker.
>> 
>> Would this help to satisfy at least some of the client app instance 
>> identification issues?
>> 
>> Note: it had also occurred to me that client apps should have static 
>> client_instance identifiers. In practical terms this might be tied to an 
>> IMEI number for example on a smart phone or other static information. 
>> However, I don't think it would solve this security issue since it would be 
>> easy to imitate. The above solution suggests a changing random string 
>> instead.
>> 
>> Phil
>> phil.h...@oracle.com
>> 
>> 
>> 
>> 
>> On 2011-04-08, at 12:10 AM, Skylar Woodward wrote:
>> 
>>> Yes, I can see how this might seem confusing. Actually, we're 
>>> authenticating the client with authorization server - not a resource 
>>> request.  On the MAC threads we discussed how the token can be used for 
>>> both.  Hopefully that clears everything up, but I'll briefly address some 
>>> of the questions inline.
>>> 
>>> On Apr 7, 2011, at 11:26 PM, Torsten Lodderstedt wrote:
>>> 
>>>> Hi Skylar,
>>>> 
>>>> Am 06.04.2011 18:02, schrieb Skylar Woodward:
>>>>> Well, I should elaborate. The method of authorization is open to the 
>>>>> client, and in this case (Kiva), MAC tokens are being used. The client 
>>>>> authenticates on the access_token request by presenting a MAC 
>>>>> authentication header. Creating the MAC signature requires a secret. In 
>>>>> the native client case, since there is no secret, it signs with the empty 
>>>>> string. So, how would you interpret this mechanism? Are we using an empty 
>>>>> string secret or signing without a secret? In terms of communicating to 
>>>>> the developers, they are told they don't have a secret. For purposes of 
>>>>> signing, they are instructed to sign with them empty string when they 
>>>>> have no secret.
>>>> 
>>>> You are talking about using the client secret to authenticate resource 
>>>> server request, correct? This is not in scope of the core spec. I was 
>>>> talking about authenticating the client with the authorization server.
>>>> 
>>>> Apart from that, do you think singing with an empty string adds any 
>>>> security to your solution?
>>> 
>>> No. It's about congruence at this point. Also, a MAC token by definition is 
>>> signed so it has to be some other assertion if it is not signed.
>>> 
>>>> Moreover as far as I understand the MAC-Spec, it recommends to use 
>>>> authorization server issued secrets to sign the request. So why do you 
>>>> need a client secret for request signing?
>>>> 
>>>>> Alternatively, one could use Bearer token for client authentication in 
>>>>> this case where the token is just the client ID. To me this is more 
>>>>> confusing because they must authenticate with different token types for 
>>>>> secret vs. non-secret.  Other opinions?
>>>> 
>>>> I'm confused now, why is the token the client id? A token is used by the 
>>>> authorization server and may contain (or refer to) any data you need to 
>>>> authorize access of the client to the resource server.
>>> 
>>> Right, you're confusing the spec with the use. I'm considering the case of 
>>> a simple Bearer assertion in cases of client authentication where clients 
>>> have no secret since an ID/password assertion would imply an empty-string 
>>> password or secret. As Marius said, we're splitting hairs at this point.  
>>> Section 3.1 makes no notes on the possible value of client_secret for 
>>> clients w/o secrets, so the assumption was that a value of 
>>> "client_secret=&..." would be ignored resulting in an invalid Client 
>>> Password submission.
>>> 
>>>> 
>>>>> As to the question of interoperability, the fact that OAuth allows 
>>>>> freedom of choice to the AS for method of authentication makes this point 
>>>>> moot. Would you agree? (short of various providers could pooling together 
>>>>> to standardize on an auth method outside of the spec).
>>>> 
>>>> What authentication are you refering to? Who do you want to authenticate?
>>> 
>>> Client authentication. Section 3.2.
>>> 
>>>> 
>>>> regards,
>>>> Torsten.
>>>> 
>>>>> 
>>>>> 
>>>>> On Apr 4, 2011, at 10:15 PM, tors...@lodderstedt.net wrote:
>>>>> 
>>>>>> Hi Skylar,
>>>>>> 
>>>>>> Thank you for sharing this information with us. Some thougts:
>>>>>> 
>>>>>> The empty string makes your implementation syntactically compliant but 
>>>>>> does obviously not comply with its semantics and the security 
>>>>>> considerations/expectations associated with a secret. Moreover, what 
>>>>>> about interoperability?
>>>>>> 
>>>>>> I think not using secrets for such clients is the honest solution. We 
>>>>>> can just change the spec's text to express what we think is the right 
>>>>>> way.
>>>>>> 
>>>>>> regards,
>>>>>> Torsten.
>>>>>> Gesendet mit BlackBerry® Webmail von Telekom Deutschland
>>>>>> 
>>>>>> -----Original Message-----
>>>>>> From: Skylar Woodward<sky...@kiva.org>
>>>>>> Date: Mon, 4 Apr 2011 19:14:53
>>>>>> To: Torsten Lodderstedt<tors...@lodderstedt.net>
>>>>>> Cc: Zeltsan, Zachary (Zachary)<zachary.zelt...@alcatel-lucent.com>; Kris 
>>>>>> Selden<kris.sel...@gmail.com>; oauth@ietf.org<oauth@ietf.org>
>>>>>> Subject: Re: [OAUTH-WG] Flowchart for legs of OAuth
>>>>>> 
>>>>>> In our implementation (not yet public) we accept the empty string ("") 
>>>>>> as the value for clients not issued secrets. While this was done to 
>>>>>> simplify the interface and implementation, it would make it compliant in 
>>>>>> my view.  In this case, the authorization server is validating the 
>>>>>> credentials, which are the client ID and the empty string, which is 
>>>>>> equivalent security-wise to any other length of "secret" issued to a 
>>>>>> native client.
>>>>>> 
>>>>>> Besides, for many providers, the client credentials will only be a 
>>>>>> client ID. They would plan to secure all exchanges over TLS and 
>>>>>> credentials serve just as a tracking device or at best, a weak form of 
>>>>>> identification.
>>>>>> 
>>>>>> skylar
>>>>>> 
>>>>>> On Apr 4, 2011, at 5:01 PM, Torsten Lodderstedt wrote:
>>>>>> 
>>>>>>> Am 04.04.2011 21:38, schrieb Zeltsan, Zachary (Zachary):
>>>>>>>> According to section "6 Refreshing an Access Token" (-13.txt), client 
>>>>>>>> when making a request for exchanging a refresh token for an access 
>>>>>>>> token has to include its authentication credentials, and the 
>>>>>>>> "authorization server MUST validate the client credentials".
>>>>>>>> How can this be done if a client is an application that can't have a 
>>>>>>>> client secret?
>>>>>>>> The authorization code grant does require client authentication (per 
>>>>>>>> section 4.1):
>>>>>>>> 
>>>>>>>> (D)  The client requests an access token from the authorization
>>>>>>>>     server's token endpoint by authenticating using its client
>>>>>>>>     credentials, and includes the authorization code received in the
>>>>>>>>     previous step.
>>>>>>>> 
>>>>>>>> It appears that the clients that cannot keep its secret cannot use (be 
>>>>>>>> issued) the refresh tokens.
>>>>>>> In my opinion, this part of the spec is misleading. Authorization code 
>>>>>>> MUST be possible without client authentication. Otherwise, OAuth is 
>>>>>>> useless for native apps.
>>>>>>> 
>>>>>>> http://tools.ietf.org/html/draft-lodderstedt-oauth-securityconsiderations-01#section-2.10
>>>>>>>  describes how the flow can be protected in such cases.
>>>>>>> 
>>>>>>> regards,
>>>>>>> Torsten.
>>>>>>>> Zachary
>>>>>>>> 
>>>>>>>> -----Original Message-----
>>>>>>>> From: oauth-boun...@ietf.org [mailto:oauth-boun...@ietf.org] On Behalf 
>>>>>>>> Of Marius Scurtescu
>>>>>>>> Sent: Monday, April 04, 2011 2:30 PM
>>>>>>>> To: Kris Selden
>>>>>>>> Cc: oauth@ietf.org
>>>>>>>> Subject: Re: [OAUTH-WG] Flowchart for legs of OAuth
>>>>>>>> 
>>>>>>>> On Mon, Apr 4, 2011 at 10:47 AM, Kris Selden<kris.sel...@gmail.com>   
>>>>>>>> wrote:
>>>>>>>>> A typical iPhone app cannot be shipped with a client secret and 
>>>>>>>>> rightly or wrongly users expect to only have to enter their 
>>>>>>>>> credentials once.
>>>>>>>>> 
>>>>>>>>> What is the best profile to use for an app that can't have a client 
>>>>>>>>> secret and needs a refresh token or a long lived access token?
>>>>>>>> The authorization code grant, aka web server flow.
>>>>>>>> 
>>>>>>>> The spec is misleading in this respect IMO.
>>>>>>>> 
>>>>>>>> Marius
>>>>>>>> _______________________________________________
>>>>>>>> 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
>> 
> 

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

Reply via email to