John

Thanks. This is *very* helpful. I will consider for next week. 

Phil

On 2013-05-17, at 23:56, John Bradley <ve7...@ve7jtb.com> wrote:

> From what I have seen deployed, there are four common flows for registration.
> 
> 1 2 developer uses a tool to register a client ID and place that in the 
> client code for deployment of a native App that is distributed via an app 
> store for a 3rd party API.   The developer may later need to make changes to 
> the registration as they develop the client and add functionality without 
> changing the client_id which would effectively invalidate all user consent as 
> consent is by client_id.
> 
> 2 A client such as a web server (Think SAML SP) has a user turn up and 
> identify themselves via a email address that be de-refrenced by say web 
> finger to find a service for the API the client knows about and wants 
> permission to access.  The client learns the registration endpoint and 
> registers itself for a client_id at the endpoint and can then do OAuth 2 
> autherization with the AS for the user.
> 
> 3 A client such as a web server wants to connect to a new AS.  They try 2 but 
> get an error for dynamic registration indicating they need a credential to 
> register.  A admin is notified and goes to some AS portal for developers and 
> register an account perhaps validating a email and phone number for contact 
> as well as agreeing to the AS's terms of service.  They then receive an 
> access token for the registration endpoint that they cut and paste into there 
> app to do the actual registration.  
> 
> 4 A client such as a web server wants to connect to a new AS.  They try 2 but 
> get an error for dynamic registration indicating they need a credential to 
> register.  A admin is notified and goes to some AS portal for developers and 
> register an account perhaps validating a email and phone number for contact 
> as well as agreeing to the AS's terms of service.  The developer must then 
> enter all there redirect URI keys and other configuration info manually into 
> a form.  Then gets another form or email with a key and client_id that they 
> use to configure the app.  If the client secret expires they must use there 
> developer account to login and get a new client secret.   This is what we are 
> trying to automate with dynamic client registration.
> 
> 5 In a version of 3 the developer may be registering a client class with 
> certain constraints that override the dynamic registration of the class.  
> They then get back the "Registration Access Token" and put that in a native 
> app to be distributed.  The native app may then create its own keypair unique 
> to that instance and proceed to register itself and get a per instance 
> client_id (but bound to the class at the AS) this would allow a native app to 
> be confidential( Some might see that as a good thing).   The native app then 
> uses the new "Registration Access Token" it is granted to manage its settings.
> The original API developer based on there developer credentials that 
> generated the original or class "Registration Access Token" could manage the 
> class including revoking it.   This higher level class management design is 
> allowed by the current spec but needs another spec to flesh it out.  This is 
> perhaps part of the 5% you are looking for.
> 
> The "Registration Access Token" is for a different resource than what ever 
> the actual API  is.  It is also not a client secret password and may have 
> much higher entropy as it is a token and not subject to limitations of http 
> basic implementations.     The initial "Registration Access Token" manages a 
> class (might only be one entity in the class) it is an access token so can 
> have scopes.  A possibility for 5 would be something like crate, update and 
> read.  In 5 the token would only have create.  The second "Registration 
> Access Token" that is instance specific would have more rights but only for 
> its instance client_id.    In the design there are two "Registration Access 
> Token"  that are separate form client credentials at the token endpoint 
> because they are possibly used by different entities for operations on 
> different subjects in the registration API.    It is possible that in an 
> extension we could allow for the developer portal to provide access tokens 
> with perhaps a delet
 e scope for the class rather than the instance if that is perhaps one of the 
things you are looking for.   
> 
> I think the higher level management of classes of clients deserves it's own 
> profile.   We need to ensure we are not blocking it with what we are doing in 
> dynamic registration.
> 
> John B.
> 
> 
> 
> On 2013-05-18, at 1:29 AM, Phil Hunt <phil.h...@oracle.com> wrote:
> 
>> John,
>> 
>> Thanks for jumping in.
>> 
>> 1.  I do buy the implied argument that some client credential types do 
>> expire (eg. bearer assertions). Therefore the expiry issue has to be dealt 
>> with.  I would prefer to handle this by allowing an exception whereby 
>> expired assertions could be used to re-register (only). This shouldn't be a 
>> big security issue since we're talking about an expired client refreshing 
>> with its issuer rather then a third party trusting an expired token. 
>> 
>> I just don't think adding another token, the registration access token, that 
>> in turn (by your argument) should expire, actually helps.  It just adds 
>> another layer to the problem and increases complexity.  It solves nothing.
>> 
>> 2. You seem to be describing a different usage than Justin is.  The way he 
>> explains the draft, there is no developer cycle at all.  He's saying every 
>> client gets a registration token and a client token.
>> 
>> Phil
>> 
>> @independentid
>> www.independentid.com
>> phil.h...@oracle.com
>> 
>> 
>> 
>> 
>> 
>> On 2013-05-17, at 10:40 AM, John Bradley wrote:
>> 
>>> 1 No reasonable security profile is going to let you use the same symmetric 
>>> password over long time periods.  It will be brute forced given enough 
>>> time.   
>>> The rotation time will depend on entropy and the rate an attacker can 
>>> submit attempts.    I would expect profiles to look at SP-800-63 for 
>>> guidance as essentially a password for the client.
>>> 
>>> 2 the registration interface is likely used by a developer who probably 
>>> doesn't want the client instances (say native clients) to be able to update 
>>> the configuration directly.  using the client secret credential for updates 
>>> would break the separation.   Registration my be done by the client itself 
>>> or by a developer as a separate process.
>>> 
>>> John B.
>>> 
>>> On 2013-05-17, at 7:27 PM, Phil Hunt <phil.h...@oracle.com> wrote:
>>> 
>>>> Justin,
>>>> 
>>>> Your reason was you copied connect. Ok. I was looking for a technical 
>>>> reason.  A security reason.
>>>> 
>>>> BTW.  Mike Jones says expiry wasn't the reason.  
>>>> 
>>>> Phil
>>>> 
>>>> @independentid
>>>> www.independentid.com
>>>> phil.h...@oracle.com
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> On 2013-05-17, at 9:01 AM, Justin Richer wrote:
>>>> 
>>>>> The separation between these two is necessary: Not all clients have 
>>>>> client_secret, and you want the lifecycle/management of the registration 
>>>>> to be protected. This is what the registration access token was made for. 
>>>>> In older versions of Connect's registration, the client_secret was forced 
>>>>> on all clients in order to provide this, but then you had public clients 
>>>>> with a client_secret that they couldn't use to get tokens, and it was a 
>>>>> bad disconnect.
>>>>> 
>>>>> The requirement for client secrets to expire or otherwise be rotated by 
>>>>> the server came from several implementors in the Connect WG. There's an 
>>>>> easy way to indicate that they don't expire, and a fairly straightforward 
>>>>> way for them to be rotated (client does a GET on its client configuration 
>>>>> endpoint url, with its registration access token as auth).
>>>>> 
>>>>> -- Justin
>>>>> 
>>>>> On 05/16/2013 05:35 PM, Phil Hunt wrote:
>>>>>> All,
>>>>>> 
>>>>>> In the dynamic registration draft, a new token type is defined called 
>>>>>> the "registration access token". Its use is intended to facilitate 
>>>>>> clients being able to update their registration and obtain new client 
>>>>>> credentials over time.  The client credential is issued on completion of 
>>>>>> the initial registration request by a particular client instance.
>>>>>> 
>>>>>> It appears the need for the registration access token arises from the 
>>>>>> implied assertion that client credentials should expire.
>>>>>> --> Is anyone expiring client credentials?
>>>>>> 
>>>>>> To date, we haven't had much discussion about client credential expiry. 
>>>>>> It leads me to the following questions:
>>>>>> 
>>>>>> 1.  Is there technical value with client credential/token expiry?  Keep 
>>>>>> in mind that client credential is only used with the token endpoint over 
>>>>>> TLS connection. It is NOT used to access resources directly.
>>>>>> 
>>>>>> 2.  If yes, on what basis should client credential/token expire?
>>>>>> a.  Time?
>>>>>> b.  A change to the client software (e.g. version update)?
>>>>>> c.  Some other reason?
>>>>>> 
>>>>>> 3. Is it worth the complication to create a new token type (registration 
>>>>>> access token) just to allow clients to obtain new client tokens?  Keep 
>>>>>> in mind that client tokens are only usable with the AS token endpoint.  
>>>>>> Why not instead use a client token for dyn reg and token endpoint with 
>>>>>> the rule that once a client token has expired (if they expire), an 
>>>>>> expired token may still be used at the registration end-point.
>>>>>> 
>>>>>> 4. Are there other reasons for the registration token?
>>>>>> 
>>>>>> Thanks,
>>>>>> 
>>>>>> Phil
>>>>>> 
>>>>>> @independentid
>>>>>> www.independentid.com
>>>>>> phil.h...@oracle.com
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> _______________________________________________
>>>>>> 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