Re: [OAUTH-WG] draft-ietf-oauth-dyn-reg and bearer tokens

Phil Hunt <phil.hunt@oracle.com> Thu, 06 June 2013 18:05 UTC

Return-Path: <phil.hunt@oracle.com>
X-Original-To: oauth@ietfa.amsl.com
Delivered-To: oauth@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 9B72D21E8084 for <oauth@ietfa.amsl.com>; Thu, 6 Jun 2013 11:05:27 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.354
X-Spam-Level:
X-Spam-Status: No, score=-6.354 tagged_above=-999 required=5 tests=[AWL=0.244, BAYES_00=-2.599, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_MED=-4]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id XNubqZtfihQI for <oauth@ietfa.amsl.com>; Thu, 6 Jun 2013 11:05:22 -0700 (PDT)
Received: from userp1040.oracle.com (userp1040.oracle.com [156.151.31.81]) by ietfa.amsl.com (Postfix) with ESMTP id E1A7321E80A3 for <oauth@ietf.org>; Thu, 6 Jun 2013 11:05:21 -0700 (PDT)
Received: from acsinet22.oracle.com (acsinet22.oracle.com [141.146.126.238]) by userp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r56I599r015145 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 6 Jun 2013 18:05:10 GMT
Received: from userz7022.oracle.com (userz7022.oracle.com [156.151.31.86]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r56I5Acg021152 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 6 Jun 2013 18:05:11 GMT
Received: from abhmt116.oracle.com (abhmt116.oracle.com [141.146.116.68]) by userz7022.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r56I5ARi007522; Thu, 6 Jun 2013 18:05:10 GMT
Received: from [192.168.1.89] (/24.86.29.34) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 06 Jun 2013 11:05:09 -0700
Mime-Version: 1.0 (Apple Message framework v1283)
Content-Type: multipart/alternative; boundary="Apple-Mail=_4C0E6B40-EBC4-433A-B0DE-464B5B306CAC"
From: Phil Hunt <phil.hunt@oracle.com>
In-Reply-To: <51B0CCDA.8010805@mitre.org>
Date: Thu, 06 Jun 2013 11:05:07 -0700
Message-Id: <7C53E628-B6C3-4E55-98B3-34336EB1D1F4@oracle.com>
References: <20130524203638.25945.84709.idtracker@ietfa.amsl.com> <51A8E0BD.9090908@mitre.org> <521EB2A2-C786-43BE-9449-A12324347E6D@oracle.com> <002701ce5e33$620faaa0$262effe0$@reminetworks.com> <0561023C-4AFC-4281-BC62-764C12EC763D@oracle.com> <51A8FCA6.9050109@mitre.org> <004401ce5e3a$01854b70$048fe250$@reminetworks.com> <CA+ZpN24S9fEfFsgMtu8pN-ct-100+HVSHAfqO4Yy2SksrYt1eA@mail.gmail.com> <255B9BB34FB7D647A506DC292726F6E1151B105DA5@WSMSG3153V.srv.dir.telstra.com> <CA+ZpN25_tguPtPDkt!> <m> <M8q=72EgnesignTuWE19wi61gCTLLL_g@mail.gmail.com> <1373E8CE237FCC43BCA36C6558612D2A9F26D0@USCHMBX001.nsn-intra.net> <919FB49B-2705-42E4-B5C3-B433C3F81C7F@ve7jtb.com> <9209089C-5B60-4212-88EA-376855DBCEA0@oracle.com> <51B0C14D.5020306@mitre.org> <1CCDB2B8-CAD9-4827-8113-F92537F70375@oracle.com> <51B0C8CE.6070309@!> <mitre.org> <B7DA2604-0B04-478C-96C3-75E4D3503DB6@oracle.com> <51B0CB6D.7060! 004@mitre.org> <C1B704A0-73EE-486E-9F45-FD20855B3DCB@oracle.com> <51B0CCDA.8010805@mitre.org>
To: Justin Richer <jricher@mitre.org>
X-Mailer: Apple Mail (2.1283)
X-Source-IP: acsinet22.oracle.com [141.146.126.238]
Cc: "oauth@ietf.org" <oauth@ietf.org>
Subject: Re: [OAUTH-WG] draft-ietf-oauth-dyn-reg and bearer tokens
X-BeenThere: oauth@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: OAUTH WG <oauth.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/oauth>, <mailto:oauth-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/oauth>
List-Post: <mailto:oauth@ietf.org>
List-Help: <mailto:oauth-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/oauth>, <mailto:oauth-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 06 Jun 2013 18:05:27 -0000

I think we are getting to the source of the confusion.

To me, the client POSTING to the registration endpoint in federated scenarios is usually anonymous.  It can present signed registration claims. My preference was through a non-credential vector, like  the software_id parameter.  This is just registration information.

In your case, you are defining a local access token issued to a developer inside a single domain. This is no inter-op, so no need to specify.  I still would prefer that it be defined as local registration information, but in this case ONLY I can accept it is local authorization.

In this case, the process works the same, only now the client is no longer anonymous. It is just doing instance registration.

Phil

@independentid
www.independentid.com
phil.hunt@oracle.com





On 2013-06-06, at 10:54 AM, Justin Richer wrote:

> ... My bad, you're right. I was getting my wires crossed with all these emails.
> 
> In my view, the initial access token is, fundamentally, an access token used to constrain access to the registration endpoint (not the configuration endpoint, and not to get "normal" access tokens). Just like a normal OAuth token is an opaque token used to constrain access to the protected resource. If you want to define anything more for either of those, you're going to need more work. 
> 
> I'm completely on board with making those definitions, but I think it goes beyond registration. And if registration is silent on all of this, and just says "the registration endpoint may be an OAuth 2.0 protected resource", then whatever interoperable solutions we can come up with for validating a cross-domain token can be applied here. I don't think it makes sense to constrain registration before the rest of this work is baked. 
> 
>  -- Justin
> 
> 
> On 06/06/2013 01:50 PM, Phil Hunt wrote:
>> We have two separate discussions going on.  8-)
>> 
>> Phil
>> 
>> @independentid
>> www.independentid.com
>> phil.hunt@oracle.com
>> 
>> 
>> 
>> 
>> 
>> On 2013-06-06, at 10:48 AM, Justin Richer wrote:
>> 
>>> I thought we were talking about the registration access token, not the initial access token?
>>> 
>>>  -- Justin
>>> 
>>> On 06/06/2013 01:48 PM, Phil Hunt wrote:
>>>> This is why this to-MAY-to vs. to-MAH-to distinction around is the initial access token an authorization token is important.
>>>> 
>>>> The purpose for the initial access token is dramatically different then normal access tokens.  This is for "registration" and does not constitute authentication or authorization.
>>>> 
>>>> Therefore, in this case, I do not believe that defining access tokens in the broader sense makes this issue clearer.
>>>> 
>>>> Registration is a very specific process different than authorization.
>>>> 
>>>> This might be a good paper to look at so the group understands why I am differentiating authorization from what is happening with initial access:
>>>> http://tools.ietf.org/html/draft-hallambaker-httpauth-00
>>>> 
>>>> Phil
>>>> 
>>>> @independentid
>>>> www.independentid.com
>>>> phil.hunt@oracle.com
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> On 2013-06-06, at 10:37 AM, Justin Richer wrote:
>>>> 
>>>>> Interoperability of the processing of OAuth tokens is a separate issue that needs to be solved not just for registration. When it is solved in the wider case, Registration as-is will inherit the solution.
>>>>> 
>>>>> So today, if you're using an Initial Access Token (which is optional), then you're locked to whatever process you want to use to verify/validate that token. Since it's just an OAuth token, you've got a number of things that you can do (assertions, introspection, magic).
>>>>> 
>>>>> I'd rather we solve the *real* cross-domain issue in the wider case than just try to cram something into registration.
>>>>> 
>>>>>  -- Justin
>>>>> 
>>>>> On 06/06/2013 01:33 PM, Phil Hunt wrote:
>>>>>> 
>>>>>> Phil
>>>>>> 
>>>>>> @independentid
>>>>>> www.independentid.com
>>>>>> phil.hunt@oracle.com
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> On 2013-06-06, at 10:05 AM, Justin Richer wrote:
>>>>>> 
>>>>>>> 
>>>>>>> On 06/06/2013 11:20 AM, Phil Hunt wrote:
>>>>>>>> As I've said before the initial auth token should nothing to do with auth. It is simply an assertion given to the developer to distribute in order to pass on signed claims about the software. 
>>>>>>> 
>>>>>>> Phil, as I and several others have explained previously, that's not true at all. It's a token that gives authorization to the registration endpoint. The fact that you can use it as an assertion to pass along signed claims is an artifact of it being an OAuth token and an OAuth token is an opaque string. Please read through the dynamic registration draft again -- it says absolutely nothing about assertions, signatures, or claims with regard to this token.
>>>>>> It depends which case you are using.  If the developer is talking to a single deployment domain and obtains an initial access token and then ships it with all clients, then sure.  In this scenario, the contents are totally controlled by the local domain.
>>>>>> 
>>>>>> I agree. In this case, you don't care about inter-op. The whole environment is siloed.  But then, if this is your case, I'm not sure why this draft is at the IETF.
>>>>>> 
>>>>>> The interoperability case is where a third party generates that assertion and the deployment domain has to decide to accept it.  So you are a developer and you want to build a client for a Microsoft or Oracle app.  You want to be able to ship that to your customers. You register with the appropriate publisher and they give you a signed assertion that can be used as the "Initial Access Token".    This token is then accepted by the deployment domain and then it decides if it trusts the signer or not.
>>>>>> 
>>>>>> ===> For this to work, the contents and format of that token MUST be defined.   Otherwise how could we ensure a Microsoft signed assertion would be accepted by a PingIdentity OAuth server?  Or any other combination of implementations from different vendors/communities?
>>>>>> 
>>>>>>> 
>>>>>>>> 
>>>>>>>> Bearer or not bearer is a distraction. The fact that the contents and format of this token is out of scope leaves a HUGE interop gap. 
>>>>>>> 
>>>>>>> The fact that some of us (myself included) are *using* this token to carry this kind of information is out of scope for the basic registration spec. I completely agree that there's value in defining this stuff, but as a separate and complementary spec from registration.
>>>>>> 
>>>>>> [PH] I was reacting to John Bradley's assertion that the spec was narrowly defined with interop in mind. Yet this mechanism is a key factor being used to share information about the software.
>>>>>> 
>>>>>>> 
>>>>>>>> 
>>>>>>>> Finally never-mind bearer bias, how are  client credentials rotated interoperably if the only thing rotated is client_secret?
>>>>>>> 
>>>>>>> *any* parameter on the client, including the registration_access_token and any extension parameters, can be rotated on any call to the Read or Update methods (except for client_id). So if you've got another mechanism for doing client authentication, you can rotate that, too.
>>>>>>> 
>>>>>>>> 
>>>>>>>> I would say the spec only works for client secrets and/or all-in-one domain where there is no interop. 
>>>>>>> 
>>>>>>> Considering I've personally used it across domains and without client secrets (using jwks_uri to register public keys), I have to empirically disagree with that statement.
>>>>>>> 
>>>>>>>  -- Justin
>>>>>>> 
>>>>>>>> 
>>>>>>>> Phil
>>>>>>>> 
>>>>>>>> On 2013-06-06, at 1:53, John Bradley <ve7jtb@ve7jtb.com> wrote:
>>>>>>>> 
>>>>>>>>> There are a couple of reasons.    
>>>>>>>>> 
>>>>>>>>> One criticism Hannes and others make of OAuth specs is they are not tightly profiled enough to be interoperable without further out of band configuration and profiling.
>>>>>>>>> 
>>>>>>>>> Making registration work with minimal ambiguity was a priority for Connect and that has carried over.
>>>>>>>>> 
>>>>>>>>> I am not opposed to having this extended at some point in the future, once we have a second token type.   The new token type should be available to do updates as well.
>>>>>>>>> 
>>>>>>>>> The problem is that starting down the HoK route potentially requires a registered client that may need to be registered to do the registration.   
>>>>>>>>> I think that is best left to another spec to sort out the possible turtles.
>>>>>>>>> 
>>>>>>>>> So the default needs to be bearer tokens unless registration is extended by another profile.
>>>>>>>>> 
>>>>>>>>> John B.
>>>>>>>>> On 2013-06-06, at 10:15 AM, "Tschofenig, Hannes (NSN - FI/Espoo)" <hannes.tschofenig@nsn.com> wrote:
>>>>>>>>> 
>>>>>>>>>> Because bearer tokens have a stable RFC-numbered spec and are widely implemented and the registration flow as documented seems like it should work?  -T
>>>>>>>>>>  
>>>>>>>>>> That’s the answer for why there is support for bearer tokens but it is not the answer to why that’s the only supported mechanism.
>>>>>>>>>> If we want to support stronger security mechanisms (which the group has decided to work on already) then we need to have a story on how to support the other mechanisms as well .
>>>>>>>>>> _______________________________________________
>>>>>>>>>> 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
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>> 
>