Re: [OAUTH-WG] Token Chaining Use Case

Bill Mills <wmills_92105@yahoo.com> Thu, 26 March 2015 21:13 UTC

Return-Path: <wmills_92105@yahoo.com>
X-Original-To: oauth@ietfa.amsl.com
Delivered-To: oauth@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 1C1731A89FA for <oauth@ietfa.amsl.com>; Thu, 26 Mar 2015 14:13:32 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: 0.791
X-Spam-Level:
X-Spam-Status: No, score=0.791 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, FREEMAIL_REPLYTO_END_DIGIT=0.25, HTML_MESSAGE=0.001, MANGLED_PREMTR=2.3, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, T_RP_MATCHES_RCVD=-0.01] autolearn=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id iy1QUiCeaBKq for <oauth@ietfa.amsl.com>; Thu, 26 Mar 2015 14:13:29 -0700 (PDT)
Received: from nm14-vm0.bullet.mail.bf1.yahoo.com (nm14-vm0.bullet.mail.bf1.yahoo.com [98.139.213.164]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 404E01B2F14 for <oauth@ietf.org>; Thu, 26 Mar 2015 14:13:29 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1427404408; bh=zI8xaHvcH2btLA7qWJygbdFEb7z1iVPGJAu/UKGvmdg=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:From:Subject; b=FaDcdCbOC5obVBSLSUOdmcSFwdcHmKVptRE72M4TITTx1NgQ30ot4B1b7AUFyVD09xrIjGaI24al76xCMnqHD9N2VPAhM8hG+QTRAjDnIXxOeCWqUPgl5eKr7nR553HD9hci9lDMPpDakNmgJgWsW1TG9+PgGLIp9QedLf+dYGUMg9M1SJpqZGaopSIS8mwyO/4z1czVxVr0t1/GG2D+oJ5vcVTyeDh0sHmqd5jGPh6k9lXDD2AhG26RWoSIkIReQb2YmoIHlkz6N49N6jgQ6uphWzJj78Bs3KVclYeuP1eRN4Yha9K5jdbNkaT7tNRBUoyc7hX/2vgIPLG+gLsmEA==
Received: from [66.196.81.171] by nm14.bullet.mail.bf1.yahoo.com with NNFMP; 26 Mar 2015 21:13:28 -0000
Received: from [98.139.212.250] by tm17.bullet.mail.bf1.yahoo.com with NNFMP; 26 Mar 2015 21:13:28 -0000
Received: from [127.0.0.1] by omp1059.mail.bf1.yahoo.com with NNFMP; 26 Mar 2015 21:13:28 -0000
X-Yahoo-Newman-Property: ymail-3
X-Yahoo-Newman-Id: 189542.76225.bm@omp1059.mail.bf1.yahoo.com
X-YMail-OSG: HzxF4EwVM1le5RdwSTbi7PCyfNlyQnn_bcw6fW6QeTb1ssuyJfMysCrW6WYWLPX wuwxObLIFIYjj0a3rK0QUtwZUgc_qDQsM4ZgByznQo9kHlA7VNh9H9EHHghCUmGI6eZiSD3TsA_0 U556WtbkdxFRp01nO6eQ._ungdQVq27Py7Uyyl4TOdEvjqNLDmVv4BvhNtC6hiHWnnVhxsQJxVeV BxilFPW6_.ZR6yK5tUu1qko14GJAWGgJ86jooxr.HaB8JxSUPL3leZsrA2uLpx8ciBJ.EugU7BEI B0aNs.a.Z_KV5wSAeX9CUowW4kID5kJf5otWwzoAEQKXvzzp4E1CHdlL4EKJee5GJoBVurn5rDOQ ya.Md4rhLn6ggWBaI5TekmBXzv5G4deDyhTWygXX3_7ABFSVvSMDnt4ky003KWFnAXESvMIkNY8S uux3U7iUsiXJRRqhuIgdCMbXwkN550ID59p_IiEwuXQu2qPwu8YD7c2.v4gG0NO8Pmk8odmp5xNd ly1yxwVTBrdeVmn2NudzoyxBbX9cklXH1z7nEjBxv
Received: by 66.196.80.120; Thu, 26 Mar 2015 21:13:27 +0000
Date: Thu, 26 Mar 2015 21:13:05 +0000
From: Bill Mills <wmills_92105@yahoo.com>
To: "Donald F. Coffin" <donald.coffin@reminetworks.com>, 'Phil Hunt' <phil.hunt@oracle.com>
Message-ID: <979394715.2988154.1427404385148.JavaMail.yahoo@mail.yahoo.com>
In-Reply-To: <002a01d06805$fa89e290$ef9da7b0$@reminetworks.com>
References: <002a01d06805$fa89e290$ef9da7b0$@reminetworks.com>
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="----=_Part_2988153_2098028161.1427404385133"
Archived-At: <http://mailarchive.ietf.org/arch/msg/oauth/qJkL621RkIBLYEWDjI9vVciqphY>
Cc: "oauth@ietf.org" <oauth@ietf.org>
Subject: Re: [OAUTH-WG] Token Chaining Use Case
X-BeenThere: oauth@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
Reply-To: Bill Mills <wmills_92105@yahoo.com>
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, 26 Mar 2015 21:13:32 -0000

The RS calling back to the AS won't be confused, the token it gets would be it's refresh token.  I don't see any reason why the AS can't be smart enough to know that a token that looks like an access token it issued is usable as a refresh token for limited purposes or downscoping.  


     On Thursday, March 26, 2015 1:46 PM, Donald F. Coffin <donald.coffin@reminetworks.com> wrote:
   

 #yiv0625374937 #yiv0625374937 -- _filtered #yiv0625374937 {font-family:Helvetica;panose-1:2 11 6 4 2 2 2 2 2 4;} _filtered #yiv0625374937 {panose-1:2 4 5 3 5 4 6 3 2 4;} _filtered #yiv0625374937 {font-family:Calibri;panose-1:2 15 5 2 2 2 4 3 2 4;} _filtered #yiv0625374937 {font-family:Cambria;panose-1:2 4 5 3 5 4 6 3 2 4;} _filtered #yiv0625374937 {panose-1:3 6 8 2 4 4 6 7 3 4;}#yiv0625374937 #yiv0625374937 p.yiv0625374937MsoNormal, #yiv0625374937 li.yiv0625374937MsoNormal, #yiv0625374937 div.yiv0625374937MsoNormal {margin:0in;margin-bottom:.0001pt;font-size:12.0pt;}#yiv0625374937 a:link, #yiv0625374937 span.yiv0625374937MsoHyperlink {color:blue;text-decoration:underline;}#yiv0625374937 a:visited, #yiv0625374937 span.yiv0625374937MsoHyperlinkFollowed {color:purple;text-decoration:underline;}#yiv0625374937 span.yiv0625374937EmailStyle17 {color:windowtext;font-weight:normal;font-style:normal;text-decoration:none none;}#yiv0625374937 .yiv0625374937MsoChpDefault {font-size:10.0pt;} _filtered #yiv0625374937 {margin:1.0in 1.0in 1.0in 1.0in;}#yiv0625374937 div.yiv0625374937WordSection1 {}#yiv0625374937 -1  Although  Justin’s point might be a bit pre-mature as far as a standards discussion, the more critical reason IMHO is calling the AS’s /Token endpoint with a grant_type of “refresh_token” but providing an issued AT rather than an issued refresh_token (RT) will definitely create a backwards compatibility issue for many implementations.  Best regards,DonDonald F. CoffinFounder/CTO  REMI Networks2335 Dunwoody Crossing Suite EDunwoody, GA 30338-8221  Phone:      (949) 636-8571Email:       donald.coffin@reminetworks.com  From: Phil Hunt [mailto:phil.hunt@oracle.com] 
Sent: Thursday, March 26, 2015 4:22 PM
To: Bill Mills
Cc: <oauth@ietf.org>
Subject: Re: [OAUTH-WG] Token Chaining Use Case  +1. We all have to change production code when non final specs evolve.   I particularly don't see this as a valid argument at the start of a standards discussion. 
Phil
On Mar 26, 2015, at 15:13, Bill Mills <wmills_92105@yahoo.com> wrote:
By definition an access token is becoming a form of refresh token.    The "because my implementation didn't do it that way" isn't convincing me.    On Thursday, March 26, 2015 12:44 PM, Justin Richer <jricher@mit.edu> wrote:  Because many implementations (including mine which does support my old token chaining draft) treat access tokens and refresh tokens separately in terms of data store and structure. Additionally, the refresh token is tied to the client and presented by the client. But in this case it's someone downstream, an RS, presenting the token. So unlike a refresh token being presented by the one it was issued to, this token is being presented by someone it was presented to.   The feeling is close, but not quite the same in either development or assumptions.  -- Justin  / Sent from my phone /

-------- Original message --------
From: Bill Mills <wmills_92105@yahoo.com> 
Date: 03/26/2015 2:24 PM (GMT-06:00) 
To: Justin Richer <jricher@MIT.EDU>, "<oauth@ietf.org>" <oauth@ietf.org> 
Subject: Re: [OAUTH-WG] Token Chaining Use Case So why can't the access tokne simply be re-used as a refresh token?  Why would it need a new grant type at all?      On Thursday, March 26, 2015 11:31 AM, Justin Richer <jricher@MIT.EDU> wrote:  As requested after last night’s informal meeting, here is the token chaining use case that I want to see represented in the token swap draft.


[ Client ]  ->  [ A ] -> [ B ] -> [ C ]

An OAuth client gets an access token AT1, just like it always would, with scopes [A, B, C] in order to call service A, which requires all three scopes. Service A (an RS) accepts this token since it has its scope, and then needs to call service B in turn, which requires scopes [B, C]. It could just re-send the token it got in, AT1, but that would give the downstream RS the ability to call services with scope [ A ] and it should not be allowed to do that. To limit exposure, service A calls a token swap at the AS to create AT2 with scopes [ B, C ], effectively acting as an OAuth client requesting a downscoped token based on AT1. Service A then acts as an OAuth client to call service B, now acting as an RS to service A’s client, and can fulfill the request. And it’s turtles all the way down: Service B can also call service C, and now B acts as a client, requesting AT3 with scope [ C ] based on AT2, and sending AT3 to service C. This prevents C from being able to call B or A, both of which would have been available if AT1 had been passed around. Note that service A or the Client can also request a downscoped token with [ C ] to call service C directly as well, and C doesn’t have to care how it got there.


In other words, it lets the client software be very, very dumb. It doesn’t have to do any special processing, doesn’t have to know what’s in the token, it just follows the recipe of “I got a token, I get another token based on this to call someone else”. It’s also analogous to the refresh token flow, but with access tokens going in and out. I’ve deployed this setup several times in different service deployments. Even though there is a performance hit in the additional round trips (as Phil brought up in another thread), in these cases the desire to have the tokens hold least privilege access rights (smallest set of scopes per service) outweighed any performance hit (which was shown to be rather small in practice).

What I want is for the token swap draft to define or use a mechanism that allows us to do this. I think we can do that pretty easily by adjusting the token swap syntax and language, and explicitly calling out the semantic processing portion (the current core of the document) for what it is: a way for a token issuer to communicate to a token service specific actions. At a high level, the spec would be something like:



1. How to swap a token at an AS
  1. Send a request to the token endpoint with a new grant type, and a token (of any type/format/flavor) on the way in
  2. Get back a new token in a token response
2. Communicating act as / on behalf of semantics via a JWT assertion
  1. How to create (as an AS/RS/client/other issuer) a JWT with act-as semantics
  2. What to do (as an AS/RS) with a JWT with act-as semantics
  3. How to create a JWT with on-behalf-of semeantics
  4. What to do with a JWT with on-behalf-of-semantics
  5. How to possibly represent these semantics with something other than a JWT



Section 2 uses the syntax from section 1. Other applications, like the one I laid out above, can use the syntax from section 1 as well. This works for structured, unstructured, self-generated, cross-domain, within-domain, and other tokens.


— Justin
_______________________________________________
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