[OAUTH-WG] Fwd: [EXTERNAL] Re: JWT Secured Authorization Request (JAR) vs OIDC request object
John Bradley <ve7jtb@ve7jtb.com> Thu, 23 January 2020 21:55 UTC
Return-Path: <ve7jtb@ve7jtb.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 5263512011D for <oauth@ietfa.amsl.com>; Thu, 23 Jan 2020 13:55:21 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.898
X-Spam-Level:
X-Spam-Status: No, score=-1.898 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=ve7jtb-com.20150623.gappssmtp.com
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 pNqIcVz5JVa4 for <oauth@ietfa.amsl.com>; Thu, 23 Jan 2020 13:55:17 -0800 (PST)
Received: from mail-wm1-x331.google.com (mail-wm1-x331.google.com [IPv6:2a00:1450:4864:20::331]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id DDA9912011C for <oauth@ietf.org>; Thu, 23 Jan 2020 13:55:16 -0800 (PST)
Received: by mail-wm1-x331.google.com with SMTP id t14so4186170wmi.5 for <oauth@ietf.org>; Thu, 23 Jan 2020 13:55:16 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ve7jtb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=YAbB1jEVg8rVUC5QpSgmk/hHzlIaWXrx4XDTx7NG9NA=; b=xqmReFq/M461I+yAwUcAhZiiqI8m7dF7EGkuAaQw+6s1UEFZJrpu44hl6uio0FvSrt Pug9f8DqgwFw5njTvqDhzvXwpuroylVmRh8KFQ02A7GlLOq0ZfzvN5UAfcFz8ubXkmjq F7o7hBFoiaOCVaiW2gwBIgYzCDjIJ+UKPTS+0nMhGsLnFVCvczLGFuNA+80FBc9ZPFXC 915JjwIVjySfPB1Ylzh4bJQAij0e8x6CWAjXeL5ErdrFsjmpWZzcXZe9du2Ndb/D2vB8 wNdSXa+sem8waP9xOohFlgB2o401LuhjSZL189SKJqk/JnPKM4PdSTfOP+rjod0oUrvU kyiQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=YAbB1jEVg8rVUC5QpSgmk/hHzlIaWXrx4XDTx7NG9NA=; b=LCZnQwxeYtGnLvfWscA2ekruUnr7OKnKSpaXi4ruVhidFIpm7TR4b4oLxpj1MTsk2G BguHtrbJ4bt5dS2x2BscBLx8hAzqFKXYcS8VRM9solKbzcoXFo/0vsJ4OJVbxkuHwQA1 5h972UimHg5QhChNTQ26uELwD/lzNHoJ2wPx9P78xFdBfRM+ZHBSd9ql1ObTHdeCNIzK ztMRhF4Lq1lPzPHPXaFO/SbKKgBEiRHbFfXnuKl6sVBYtFWxy8ULgHFQ+J083y0IIncP EH/h3q0f8xFpGHumfSOFoTg78g1sstT3Rvjwq6G0HPsTOaTMD+478BbV3DDXOW8wOSqt vhKg==
X-Gm-Message-State: APjAAAVKmHiO2KX/mvNZw4C9P3vNdpHfba+ZTCjlw9ttCRlW1bvp2t0k 5Ivsged8yjvrF+jSr45/aZrhl3BtE1arJh2I8Oc+zilh9Ks=
X-Google-Smtp-Source: APXvYqyqZ2wd34VFMteVHHLHFLbAUHYzvfRxL25eeKjjZLCbkw9mt1opukFPxJPmKH1oqAUwYM0qn6PjjRW6aJh7iRk=
X-Received: by 2002:a1c:4c5:: with SMTP id 188mr65866wme.82.1579816514644; Thu, 23 Jan 2020 13:55:14 -0800 (PST)
MIME-Version: 1.0
References: <CAANoGhJB4mYSFiWKt3T=cObH7uCW0s3Zpv2m92+YaAY2Oy4mqw@mail.gmail.com> <2aca5c38-bb20-497e-14ed-f4a9245a9439@connect2id.com> <7baae999-47c1-f749-6c51-f45022ab1a3d@ve7jtb.com> <3d9ffc74-6c9c-48a1-0c98-65a7465e8dbc@connect2id.com> <CAHdPCmNHeUyDjrc32oQPZ5g3oars-XY3vq2p3qt2LzzkZMTw5w@mail.gmail.com> <89345e9b-8191-f01d-71a6-453ec197796f@connect2id.com> <20200116045302.GG80030@kduck.mit.edu> <837c8db5-5200-29c6-5914-167b77bdc071@ve7jtb.com> <9DAC4E16-2A60-4B86-B1FA-B59B097E8F78@authlete.com> <D6837D1F-01B6-4B46-8DF7-41969BE96112@mit.edu> <20200118025320.GV80030@kduck.mit.edu> <CAANoGhKtgqob_7AmFJ-OfROSx7QopehFdKAx8qmR8rUdzLNWPA@mail.gmail.com>
In-Reply-To: <CAANoGhKtgqob_7AmFJ-OfROSx7QopehFdKAx8qmR8rUdzLNWPA@mail.gmail.com>
From: John Bradley <ve7jtb@ve7jtb.com>
Date: Thu, 23 Jan 2020 18:55:04 -0300
Message-ID: <CAANoGhJgz6QC8rTwXH4Fik9bRydFDuAJB3Kpvoj3j1MCX2CZOw@mail.gmail.com>
To: oauth@ietf.org
Content-Type: multipart/alternative; boundary="0000000000002a85f1059cd5b285"
Archived-At: <https://mailarchive.ietf.org/arch/msg/oauth/YDL8XvIb7jtJfWs73vRiE-W3zUo>
Subject: [OAUTH-WG] Fwd: [EXTERNAL] Re: JWT Secured Authorization Request (JAR) vs OIDC request object
X-BeenThere: oauth@ietf.org
X-Mailman-Version: 2.1.29
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: <https://mailarchive.ietf.org/arch/browse/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, 23 Jan 2020 21:55:22 -0000
---------- Forwarded message --------- From: John Bradley <ve7jtb@ve7jtb.com> Date: Sat, Jan 18, 2020, 9:31 PM Subject: Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authorization Request (JAR) vs OIDC request object To: Benjamin Kaduk <kaduk@mit.edu> If you put the iss in the JWE header it is integrity protected, as JWE only supports AAD encryption algs. It is more of a problem when the client is sending a requestURI in that case having the clientID in the GET to the Authorization endpoint is useful. I think there is a argument for explicitly allowing the clientID as long as it exactly matches the clientID in the JAR. John B. On Fri, Jan 17, 2020 at 11:53 PM Benjamin Kaduk <kaduk@mit.edu> wrote: > On Fri, Jan 17, 2020 at 08:44:18AM -0500, Justin Richer wrote: > > I don’t agree with this stance from a security or implementation > perspective. > > > > If there’s a clear order of precedence for the information, it’s not > particularly problematic. Everything inside the request object is to be > taken over things outside the request object. We have the exact same > semantics and process with dynamic registration, where the software > statement is carried alongside plain JSON claims, and the two are mixed > with a very simple algorithm: > > > > - If a field is inside the signed payload, use that value and ignore > any copy of it on the outside > > - If a field is not inside the signed payload and is outside the signed > payload, use the outside value > > > > Can someone please point out a concrete security issue with this > algorithm? This is the extent of the “merge” semantics that we need here, > and it would solve not only the ability to use this for use cases that call > for a more static request object (perhaps signed by a third party and not > the client) along side the plain parameters that can vary, but also the > backwards compatibility issue that’s been discussed. With this algorithm in > place, you could have OIDC clients actually be compliant with the spec, > since OIDC requires replication of the values inside the request object on > the outside with exact matches. An OIDC server wouldn’t be fully compliant > with the new spec since it would reject some compliant JAR requests that > are missing the external parameters, but that’s fairly easy logic to add on > the OIDC side. And in that case you get a matrix of compatibility like: > > I agree that the merge algorithm is simple and fairly straightforward to > implement. But, as Joseph has been alluding, it's only simple if you've > already made the decision to use all the parameters, both from inside and > from outside the signed payload. The security risk lies about having to > make the trust decision twice, more than the mundane details of actually > doing the merge. (Though there is still some latent risk, given that we've > seen some really crazy quality of implementation out there.) > > It's certainly *possible* that things end up fine in many well-deliniated > cases where merging can be used. But it's more complicated to reason > about, and I don't remmber seeing much previous discussion about the > specifics of the double trust decision. > > -Ben > > > > > JAR Server | OIDC Server | > > ------------+------------+--------------+ > > JAR Client | YES | NO | > > OIDC Client | YES | YES | > > > > Breaking one out of the four possible combinations in a very predictable > way is, I think, the best way to handle backwards compatibility here. > > > > But between this issue and JAR’s problematic call for the value of a > request_uri to always be a JWT and be fetchable by the AS (neither of which > are true in the case of PAR) makes me think we need to pull this back and > rework those things, in a push back to the IESG’s comments. > > > > — Justin > > > > > > > On Jan 16, 2020, at 7:38 PM, Joseph Heenan <joseph@authlete.com> > wrote: > > > > > > I agree with this, particularly the security concerns of merging. If > we merge, we can much guarantee there will eventually be a security issue > where an attacker is able to gain an advantage by adding a parameter to the > url query (which the server would then happily process if that parameter > isn’t found inside the request object). Ruling out that case makes security > analysis (particularly when creating new OAuth2 parameters) significantly > simpler. > > > > > > Putting the iss in the JWE header and having the client_id duplicated > outside the request object seem to address all the concerns I’ve seen > raised. > > > > > > (It seems like it may be unnecessary to have the client_id duplicated > outside if the request_uri is a PAR one though.) > > > > > > Joseph > > > > > > > > > > > >> On 16 Jan 2020, at 22:40, John Bradley <ve7jtb@ve7jtb.com> wrote: > > >> > > >> I agree with the IESG reasoning that merging is problimatic. Once we > > >> allow that given a unknown list of possible paramaters with diffrent > > >> security properties it would be quite difficult to specify safely. > > >> > > >> Query paramaters can still be sent outside the JAR, but if they are in > > >> the OAuth registry the AS MUST ignore them. > > >> > > >> Puting the iss in the JWE headder addresses the encryption issue > without > > >> merging. > > >> > > >> I understand that some existing servers have dependencys on getting > the > > >> clientID as a query paramater. > > >> > > >> Is that the only paramater that people have a issue with as oposed to > a > > >> nice to have? > > >> > > >> Would allowing the AS to not ignore the clientID as a query paramater > as > > >> long as it matches the one inside the JAR, basicly the same as Connect > > >> request object but for just the one paramater make life easier for the > > >> servers? > > >> > > >> I am not promising a change but gathering info before proposing > something. > > >> > > >> John B. > > >> > > >> > > >> On 1/16/2020 1:53 AM, Benjamin Kaduk wrote: > > >>> On Wed, Jan 15, 2020 at 11:02:33PM +0200, Vladimir Dzhuvinov wrote: > > >>>> On 14/01/2020 19:20, Takahiko Kawasaki wrote: > > >>>>> Well, embedding a client_id claim in the JWE header in order to > > >>>>> achieve "request parameters outside the request object should not > be > > >>>>> referred to" is like "putting the cart before the horse". Why do we > > >>>>> have to avoid using the traditional client_id request parameter so > > >>>>> stubbornly? > > >>>>> > > >>>>> The last paragraph of Section 3.2.1 > > >>>>> <https://tools.ietf.org/html/rfc6749#section-3.2.1> of RFC 6749 > says > > >>>>> as follows. > > >>>>> > > >>>>> /A client MAY use the "client_id" request parameter to identify > > >>>>> itself when sending requests to the token endpoint. In the > > >>>>> "authorization_code" "grant_type" request to the token endpoint, > > >>>>> *an unauthenticated client MUST send its "client_id" to prevent > > >>>>> itself from inadvertently accepting a code intended for a client > > >>>>> with a different "client_id".* This protects the client from > > >>>>> substitution of the authentication code. (It provides no > > >>>>> additional security for the protected resource.)/ > > >>>>> > > >>>>> > > >>>>> If the same reasoning applies, a client_id must always be sent with > > >>>>> request / request_uri because client authentication is not > performed > > >>>>> at the authorization endpoint. In other words, */an unauthenticated > > >>>>> client (every client is unauthenticated at the authorization > endpoint) > > >>>>> MUST send its "client_id" to prevent itself from inadvertently > > >>>>> accepting a request object for a client with a different > "client_id"./* > > >>>>> > > >>>> Identifying the client in JAR request_uri requests can be really > useful > > >>>> so that an AS which requires request_uri registration to prevent > DDoS > > >>>> attacks and other checks can do those without having to index all > > >>>> request_uris individually. I mentioned this before. > > >>>> > > >>>> I really wonder what the reasoning of the IESG reviewers was to > insist > > >>>> on no params outside the JAR JWT / request_uri. > > >>>> > > >>>> I'm beginning to realise this step of the review process isn't > > >>>> particularly transparent to WG members. > > >>> Could you expand on that a bit more? My understanding is that the > IESG > > >>> ballot mail gets copied to the WG precisely so that there is > transparency, > > >>> e.g., the thread starting at > > >>> > https://mailarchive.ietf.org/arch/msg/oauth/lkOhwiDj_hCI55BQRdiR9R0JwgI > > >>> Which admittely is from almost three years ago, but that's the > earliest > > >>> that I found that could be seen as the source of this behavior. > > >>> > > >>> -Ben > > >>> > > >>> P.S. some other discussion at > > >>> > https://mailarchive.ietf.org/arch/msg/oauth/-tUrNY1X9eI_tQGI8T-IGx4xHy8 > and > > >>> > https://mailarchive.ietf.org/arch/msg/oauth/Uke1nxRlgx62EJLevZgpWCz_UwY > and > > >>> so on. > > >>> > > >>> _______________________________________________ > > >>> 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 >
- Re: [OAUTH-WG] JWT Secured Authorization Request … Torsten Lodderstedt
- Re: [OAUTH-WG] JWT Secured Authorization Request … John Bradley
- [OAUTH-WG] JWT Secured Authorization Request (JAR… Filip Skokan
- Re: [OAUTH-WG] JWT Secured Authorization Request … Torsten Lodderstedt
- Re: [OAUTH-WG] JWT Secured Authorization Request … Filip Skokan
- Re: [OAUTH-WG] JWT Secured Authorization Request … Brian Campbell
- Re: [OAUTH-WG] JWT Secured Authorization Request … Filip Skokan
- Re: [OAUTH-WG] JWT Secured Authorization Request … Filip Skokan
- Re: [OAUTH-WG] JWT Secured Authorization Request … Brian Campbell
- Re: [OAUTH-WG] JWT Secured Authorization Request … Torsten Lodderstedt
- Re: [OAUTH-WG] JWT Secured Authorization Request … Takahiko Kawasaki
- Re: [OAUTH-WG] JWT Secured Authorization Request … Nat Sakimura
- Re: [OAUTH-WG] JWT Secured Authorization Request … Dominick Baier
- Re: [OAUTH-WG] JWT Secured Authorization Request … John Bradley
- Re: [OAUTH-WG] JWT Secured Authorization Request … Nat Sakimura
- Re: [OAUTH-WG] JWT Secured Authorization Request … Takahiko Kawasaki
- Re: [OAUTH-WG] JWT Secured Authorization Request … Justin Richer
- Re: [OAUTH-WG] JWT Secured Authorization Request … Takahiko Kawasaki
- Re: [OAUTH-WG] JWT Secured Authorization Request … Justin Richer
- Re: [OAUTH-WG] JWT Secured Authorization Request … Vladimir Dzhuvinov
- Re: [OAUTH-WG] JWT Secured Authorization Request … n-sakimura
- Re: [OAUTH-WG] JWT Secured Authorization Request … Filip Skokan
- Re: [OAUTH-WG] JWT Secured Authorization Request … Takahiko Kawasaki
- Re: [OAUTH-WG] JWT Secured Authorization Request … Justin Richer
- Re: [OAUTH-WG] JWT Secured Authorization Request … John Bradley
- Re: [OAUTH-WG] JWT Secured Authorization Request … Justin Richer
- Re: [OAUTH-WG] JWT Secured Authorization Request … John Bradley
- Re: [OAUTH-WG] JWT Secured Authorization Request … Torsten Lodderstedt
- Re: [OAUTH-WG] JWT Secured Authorization Request … Vladimir Dzhuvinov
- Re: [OAUTH-WG] JWT Secured Authorization Request … Filip Skokan
- Re: [OAUTH-WG] JWT Secured Authorization Request … Vladimir Dzhuvinov
- Re: [OAUTH-WG] JWT Secured Authorization Request … John Bradley
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Mike Jones
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… John Bradley
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Vladimir Dzhuvinov
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… John Bradley
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Vladimir Dzhuvinov
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Takahiko Kawasaki
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Vladimir Dzhuvinov
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Mike Jones
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Benjamin Kaduk
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Benjamin Kaduk
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Benjamin Kaduk
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Neil Madden
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Dominick Baier
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Neil Madden
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… John Bradley
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Neil Madden
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Benjamin Kaduk
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Nat Sakimura
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Neil Madden
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Nat Sakimura
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Joseph Heenan
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Benjamin Kaduk
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Benjamin Kaduk
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Justin Richer
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Richard Backman, Annabelle
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Jim Manico
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Richard Backman, Annabelle
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Justin Richer
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Brian Campbell
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Joseph Heenan
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Benjamin Kaduk
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Benjamin Kaduk
- Re: [OAUTH-WG] [EXTERNAL] Re: JWT Secured Authori… Neil Madden
- [OAUTH-WG] Fwd: [EXTERNAL] Re: JWT Secured Author… John Bradley
- Re: [OAUTH-WG] Fwd: [EXTERNAL] Re: JWT Secured Au… Nat Sakimura
- Re: [OAUTH-WG] JWT Secured Authorization Request … Mike Jones
- Re: [OAUTH-WG] JWT Secured Authorization Request … Joseph Heenan
- Re: [OAUTH-WG] Fwd: [EXTERNAL] Re: JWT Secured Au… Filip Skokan
- Re: [OAUTH-WG] JWT Secured Authorization Request … Brian Campbell
- Re: [OAUTH-WG] JWT Secured Authorization Request … George Fletcher
- Re: [OAUTH-WG] JWT Secured Authorization Request … Nat Sakimura
- Re: [OAUTH-WG] JWT Secured Authorization Request … Vladimir Dzhuvinov
- Re: [OAUTH-WG] JWT Secured Authorization Request … Rob Otto