On Fri, Jun 11, 2010 at 11:46 AM, George Fletcher <gffle...@aol.com> wrote:
> On 6/11/10 2:09 PM, Marius Scurtescu wrote:
>>
>> On Fri, Jun 11, 2010 at 10:07 AM, George Fletcher<gffle...@aol.com>
>>  wrote:
>>
>>>
>>> On 6/11/10 12:34 PM, Marius Scurtescu wrote:
>>>
>>>>
>>>> On Fri, Jun 11, 2010 at 9:25 AM, George Fletcher<gffle...@aol.com>
>>>>  wrote:
>>>>
>>>>
>>>>>
>>>>> On 6/11/10 12:07 PM, Marius Scurtescu wrote:
>>>>>
>>>>>
>>>>>>
>>>>>> On Fri, Jun 11, 2010 at 8:59 AM, David Recordon<record...@gmail.com>
>>>>>>  wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> That sounds like a security consideration to me! :)
>>>>>>>
>>>>>>> I imagine that authorization servers will verify ownership in
>>>>>>> different manners depending on their tolerance of risk.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> Instead of POSTing a JSON with all the details, dynamic binding could
>>>>>> send only a host name. The authz server would then do discovery on
>>>>>> this host and get a pointer to this JSON from host-meta.
>>>>>>
>>>>>> Marius
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> I think most all of this could be described in the host-meta XRD
>>>>> directly
>>>>> to
>>>>> save yet another round trip. And I believe there are some security
>>>>> advantages to using this approach, but it does require the "client" to
>>>>> be
>>>>> a
>>>>> web-server. This might not always be the case (rich desktop app). For
>>>>> native/desktop apps, it seems that posting some set of parameters
>>>>> (equivalent security-wise to a browser user-agent) makes sense and
>>>>> keeps
>>>>> the
>>>>> protocol simple.
>>>>>
>>>>>
>>>>
>>>> Yes, but in this case (desktop app) the "url" and "icon" parameters
>>>> don't work and what is left is "name" and "description". I think that
>>>> the suggested "client_name" parameter does exactly the same thing,
>>>> much simpler. Is there any value in this case in a client_secret?
>>>>
>>>> Marius
>>>>
>>>>
>>>
>>> Well... given this is a POST and structured data... it would be possible
>>> for
>>> the desktop app to post the raw icon data (though I suppose it could also
>>> POST a URL to the web server of the company the produces the app). In
>>> which
>>> case your previous suggestion would work (parameters discovered via the
>>> URL).
>>>
>>> I do believe the client_secret is valuable in this case because the AS is
>>> returning both the client_id and the client_secret. This then becomes a
>>> way
>>> for provisioning a unique client_id and client_secret to every instance
>>> of
>>> the app. A lot more for the AS to keep track of, but also makes it more
>>> difficult for an attacker to compromise a client. The attacker could
>>> impersonate the POST'd client description data (just like user-agent
>>> strings
>>> can be impersonated), but then the attacker just has a client_id and
>>> client_secret for it's instance.
>>>
>>> This should force the attacker to get explicit user consent from the user
>>> to
>>> authorize that unique client_id. I wouldn't recommend for the AS to track
>>> authorization against the POST'd client description but rather the
>>> client_id.
>>>
>>
>> An attacker can also dynamically register a very similar client
>> name/description and trick the user.
>>
>
> True... but the user will see another consent form. This might be a minor
> hurdle but at least it's not totally seamless. I think that is an advantage.

Why would the user see another consent form? Were you thinking
auto-approvals? For desktop apps auto-approvals don't make much sense
and authz servers should probably never do that.


>> The authz server is issuing a unique refresh token for each client,
>> and I still don't see how an extra client_secret helps in this case.
>>
>
> Good point. With SSL and bearer tokens the client_secret doesn't do much
> good. Now if we signed the requests with the unique client_secret from the
> desktop app... :)

Yes, but let's see how the signature specs work out.


>> For a web client the client secret helps if the refresh token is
>> compromised. The web client most likely will store many refresh
>> tokens, one for each user, in the database, with SQL injection all of
>> these can be compromised, but the client secret (if it was not in the
>> same database) makes them useless. This could be a reason why dynamic
>> registration for web clients is a bad idea, the client secret will end
>> up in the database, instead of a config file.
>>
>
> The web site could store client_secrets in a different database that is not
> exposed to the same SQL Injection attacks. Where the data is stored doesn't
> seem like it affects it's ability to be compromised or protected. If the web
> server is not well protected, getting the config file with the client_secret
> might be easier than getting data out of the database. I think the security
> of where the web app stores the data is orthogonal to the security of the
> protocol.

Maybe, not sure. If web clients are encouraged to put the secret in
the database then it will end up next to the refresh token, for sure.


> I suppose this also depends on which flow the desktop app is following. If
> using the web-user flow (by launching the default browser, then the
> client_secret (v2-06) is required. If following the device flow... then it's
> not (though it seems this flow is still being defined).

client_secret is required only if one was issued, "REQUIRED if the
client identifier has a matching secret." So the Web Server flow
should work just fine for unregistered or unsecure (registered but no
secret was issued) clients.


> So maybe the solution is that if the authorization server doesn't think the
> client_secret is useful, it doesn't return it. Or it always returns it and
> the client can throw it away as it knows it won't use it. However, it seems
> like the rest of the registration flow still holds.

Without client_secret I still don't see the point. Registration then
boils down to self asserted name, which can also be achieved with the
client_name paramter, no?

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

Reply via email to