I believe the IESG was incorrect in their review and what’s in the text now is 
not what the WG agreed to.

Question is, what’s our next step, then?

 — Justin

> On Jan 6, 2020, at 5:50 PM, John Bradley <ve7...@ve7jtb.com> wrote:
> 
> My take would be that any paramater in the OAuth registy is a OAuth 
> paramater. 
> 
> A client could duplicate those outside the request object for some sort of 
> backwards compatability but they will be ignored.
> 
> What we have lost is the merge capability.  There are some use cases that 
> could use that to have a presigned object that some paramaters like state are 
> outside.   
> 
> That was not popular with the IESG.  
> 
> John B.
> 
> On 1/6/2020 3:04 AM, n-sakimura wrote:
>> Up until -12 (Feb 13, 2017), it was using merge + JAR precedence if 
>> duplicated.
>> As of -13 (Mar 30, 2017), it was changed that the server does not have to do 
>> the merge, at least for OAuth Authorization request parameters. It says 
>> nothing about other parameters.
>> As of -14 (Jul 21, 2017), the wording was further strengthened by adding
>>  
>> The Authorization Server MUST only use the parameters in the Request Object 
>> even if the same parameter is provided in the query parameter.
>>  
>> So, the entire 6.3 now became
>>  <>6.3 <https://tools.ietf.org/html/draft-ietf-oauth-jwsreq-20#section-6.3>. 
>>  Request Parameter Assembly and Validation
>> 
>>    The Authorization Server MUST extract the set of Authorization
>>    Request parameters from the Request Object value.  The Authorization
>>    Server MUST only use the parameters in the Request Object even if the
>>    same parameter is provided in the query parameter.  The Authorization
>>    Server then validates the request as specified in OAuth 2.0
>>    [RFC6749 <https://tools.ietf.org/html/rfc6749>].
>>  
>> It says nothing on the non-OAuth parameters that came with the authorization 
>> request.
>> My take on the text is that all OAuth Authorization Request parameters MUST 
>> be in the request object.
>> Behaviors towards other parameters that happens to have come together with 
>> the authorization request outside of request object will be treated as 
>> non-OAuth parameters.
>>  
>> Nat Sakimura
>> Research Fellow, Nomura Research Institute
>> E: n-sakim...@nri.co.jp <mailto:n-sakim...@nri.co.jp>
>> T: +81(90)60136276
>> ---------------------------------------------------------
>> PLEASE READ:This <read:This> e-mail is confidential and intended for the 
>> named recipient only.
>> If you are not an intended recipient, please notify the sender and delete 
>> this e-mail.
>>  
>> From: OAuth <oauth-boun...@ietf.org> <mailto:oauth-boun...@ietf.org> On 
>> Behalf Of Justin Richer
>> Sent: Friday, January 3, 2020 2:35 AM
>> To: Takahiko Kawasaki <t...@authlete.com> <mailto:t...@authlete.com>
>> Cc: Brian Campbell <bcampbell=40pingidentity....@dmarc.ietf.org> 
>> <mailto:bcampbell=40pingidentity....@dmarc.ietf.org>; oauth <oauth@ietf.org> 
>> <mailto:oauth@ietf.org>; Nat Sakimura <nat.sakim...@oidf.org> 
>> <mailto:nat.sakim...@oidf.org>
>> Subject: Re: [OAUTH-WG] JWT Secured Authorization Request (JAR) vs OIDC 
>> request object
>>  
>> For solution [2], this is the behavior that’s required for OIDC today, so I 
>> would say that’s the New Client behaving like an Old Client in order to talk 
>> to an Old Server. So in reality, (2) causes the request to be rejected, and 
>> that’s OK.
>>  
>> I don’t think it’s viable to require parameters to exist inside the request 
>> object at all times. Nor should we try to enumerate which parameters go 
>> inside and outside at all times — at least from the JAR/OAuth level of 
>> things. I think there are too many things that are application and 
>> deployment specific for us to make this call. The very nature of the request 
>> object changes for people — some have a static object that’s deployed with 
>> clients and some have something that the client creates at runtime for each 
>> request. 
>>  
>> If the instead the New Server requires that any parameters duplicated 
>> between the two places have to match (the OIDC method) or that in a conflict 
>> the request object values take precedence (the merge method), then problems 
>> 3-1 and 3-2 go away. 
>>  
>> With the merge-and-precedence behavior, which is what I thought that JAR had 
>> during WGLC, [3-1] is well-defined. The request is processed the same way 
>> every time because this is a New Server. The client is going to do OIDC’s 
>> “duplicate” method, so “merge with precedence” is effectively a no-op.
>>  
>> With the merge-and-precedence behavior, [3-2] doesn’t happen because the 
>> required parameters aren’t required to be in the request object itself. As 
>> long as the request object is valid, it protects all parameters within it. I 
>> don’t think it’s up to us to determine what makes sense to put in that 
>> object. Security guidance is probably a good idea here.
>>  
>> Solution [3] is what Old Clients already do in OIDC today, so that’s what 
>> already happens and why problem space (3) isn’t a problem.
>>  
>>  — Justin
>> 
>> 
>> On Jan 2, 2020, at 12:24 PM, Takahiko Kawasaki <t...@authlete.com 
>> <mailto:t...@authlete.com>> wrote:
>>  
>> Thank you, Justin. Actually, I wanted to see someone write a summary about 
>> what happens in each combination from a viewpoint of both RP and AS with 
>> regard to backward compatibility (as I told you in other channel just before 
>> you posted your email ^_^).
>> 
>> So,
>> 
>> (1) New Client + New Server
>> No problem will happen.
>> 
>> (2) New Client + Old Server
>> [Problem 2-1] If an authorization request contains 'request' or 
>> 'request_uri' but doesn't have old mandatory request parameters ('client_id' 
>> and 'response_type') outside the request object, the request is rejected.
>> 
>> [Solution 2] New Client should include the old mandatory request parameters 
>> duplicately outside the request object. This means that New Client should 
>> always send old mandatory request parameters duplicately outside the request 
>> object if it wants to get maximum compatibility.
>> 
>> (3) Old Client + New Server
>> [Problem 3-1] If an authorization request contains 'request' or 
>> 'request_uri' and some "optional" request parameters are not included in the 
>> request object, AS will interpret the request differently. Imagine what 
>> happens when optional parameters such as 'scope', 'state', 'nonce', 
>> 'redirect_uri', 'response_mode', 'max_age', 'acr_values', 'code_challenge', 
>> 'code_challenge_method' and 'prompt' are not included in the request object 
>> but present outside the request object.
>> 
>> [Problem 3-2] If an authorization request contains 'request' or 
>> 'request_uri' and some "mandatory" request parameters ('client_id' and 
>> 'response_type') are not included in the request object, the request is 
>> rejected.
>> 
>> [Solution 3] Old Client should include all request parameters duplicately in 
>> the request object. This means that Old Client should always include all 
>> request parameters duplicately in the request object if it wants to get 
>> maximum compatibility.
>> 
>> (4) Old Client + Old Server
>> No problem will happen.
>> 
>> - - -
>> 
>> From a Client's point of view, for maximum compatibility, both Old and New 
>> Clients should put mandatory request parameters outside the request object 
>> and put all request parameters duplicately inside the request object.
>> 
>> [Problem 3-1] is difficult to detect because the authorization request is 
>> not rejected. But, if New Server requires that all request parameters 
>> outside the request object be put inside the request object duplicately, 
>> [Problem 3-1] is handled as an error and thus client developers can detect 
>> the problem.
>> 
>> Consequently, introducing the following requirement in "FAPI Part 2, 5.2.2 
>> <https://openid.net/specs/openid-financial-api-part-2-ID2.html#authorization-server>,
>>  10" to JAR seems a good compromise (as I told before)
>> 
>> shall require that all parameters are present inside the signed request 
>> object passed in the request or request_uri parameter;
>> 
>> instead of just saying "the authorization server supporting this 
>> specification MUST only use the parameters included in the request object." 
>> which will bring about [Problem 3-1]. That is, how about adding a rule like 
>> "if request parameters exist outside the request object, they must exist 
>> inside the request object, too."?
>> 
>> Any thoughts?
>>  
>> Best,
>> Taka
>>  
>>  
>> On Fri, Jan 3, 2020 at 12:48 AM Justin Richer <jric...@mit.edu 
>> <mailto:jric...@mit.edu>> wrote:
>> I think the nature of the backwards incompatibility is important here. The 
>> way that things are now, using merge-with-precedence, you have the following 
>> matrix of compatibility:
>>  
>>  
>>              New Server  |  Old Server  |
>> -----------+-------------+--------------+
>> New Client |      YES    |      NO      |
>> Old Client |      YES    |     YES      |
>>  
>>  
>> If you ask me, this is the right balance for a breaking change. Old clients, 
>> where the vast majority of the code is, don’t have to change. New clients 
>> can only talk to servers with the new features, which is the ability to drop 
>> parameters from the external request. This would apply to both OIDC and 
>> plain OAuth.
>>  
>> I think we should follow this kind of pattern in the discussions on OAuth 
>> 2.1, which I think JAR should be a part of/
>>  
>>  — Justin
>>  
>>  
>> 
>> 
>> On Jan 2, 2020, at 3:40 AM, Takahiko Kawasaki <t...@authlete.com 
>> <mailto:t...@authlete.com>> wrote:
>>  
>> Breaking backward compatibility in this part would mean that OpenID 
>> Certification given to AS implementations with request_uri support will be 
>> invalidated once they support JAR. It also would mean that test cases in the 
>> official conformance suite need to be changed in a backward-incompatible 
>> manner, which would implicitly encourage that all certified implementations 
>> should re-try to get certification.
>> 
>> Changing the spec now might need more three to six months, but it would be 
>> worth considering what we get and lose by saving the months and breaking 
>> backward compatibility.
>> 
>> Best Regards,
>> Taka
>>  
>> On Wed, Dec 18, 2019 at 4:14 PM Nat Sakimura <sakim...@gmail.com 
>> <mailto:sakim...@gmail.com>> wrote:
>> So, no change is OK? 
>>  
>> On Wed, Dec 11, 2019 at 10:01 PM John Bradley <ve7...@ve7jtb.com 
>> <mailto:ve7...@ve7jtb.com>> wrote:
>> I also slightly prefer the merge approach. 
>>  
>> There are plusses and minuses to both. 
>>  
>> Changing again now that it is past ISEG review and backing out a Discuss 
>> will add another three to six months at this point, if we can get them to 
>> agree to the change. 
>>  
>> John B. 
>>  
>> On Tue, Dec 10, 2019, 11:29 PM Nat Sakimura <sakim...@gmail.com 
>> <mailto:sakim...@gmail.com>> wrote:
>> Correct. The WG supported the precedence approach and even merge just like 
>> OIDC as it is very useful from the implementation point of view and helps 
>> with a bunch of deployment patter. 
>>  
>> The push back came in from the Ben Campbell’s DISCUSS. 
>> See 
>> https://bitbucket.org/Nat/oauth-jwsreq/issues/70/bc-the-current-text-actually-specifies-the
>>  
>> <https://bitbucket.org/Nat/oauth-jwsreq/issues/70/bc-the-current-text-actually-specifies-the>
>>  
>> I am willing to go either way as long as people agree. My slight preference 
>> is to the original approach. 
>>  
>> Best, 
>>  
>> Nat Sakimura
>>  
>> 2019年8月29日(木) 6:56 Brian Campbell 
>> <bcampbell=40pingidentity.....@dmarc.ietf.org 
>> <mailto:40pingidentity....@dmarc.ietf.org>>:
>> FWIW, as best I can remember the change in question came as I result of 
>> directorate/IESG review rather than a WG decision/discussion. Which is 
>> likely why you can't find the "why" anywhere in the mailing list archive.
>>  
>> On Wed, Aug 28, 2019 at 3:23 PM Filip Skokan <panva...@gmail.com 
>> <mailto:panva...@gmail.com>> wrote:
>> Well it kind of blows, doesn't it? I wasn't able to find the "why" anywhere 
>> in the mailing list archive around the time this was changed.
>>  
>> My take on satisfying both worlds looks like this
>>  
>> - allow just JAR - no other params when possible.
>>     (which btw isn't possible to do with request_uri when enforcing client 
>> based uri whitelist and the jwsreq 5.2.2 shows as much)
>> - enforce the "dupe behaviours" defined in OIDC (if response_type or 
>> client_id is in request object it must either be missing or the same in 
>> regular request).
>> - allows merging request object and regular parameters with request object 
>> taking precedence since it is a very useful feature when having pre-signed 
>> request object that's not one time use and clients using it wish to vary 
>> state/nonce per-request.
>>  
>> I wish the group reconsidered making this breaking change from OIDC's take 
>> on request objects - allow combination of parameters from the request object 
>> with ones from regular parameters (if not present in request object).
>> 
>> S pozdravem,
>> Filip Skokan
>>  
>>  
>> On Wed, 28 Aug 2019 at 23:02, Brian Campbell <bcampb...@pingidentity.com 
>> <mailto:bcampb...@pingidentity.com>> wrote:
>> Filip, for better or worse, I believe your assessment of the situation is 
>> correct. I know of one AS that didn't choose which of the two to follow but 
>> rather implemented a bit of a hybrid where it basically ignores everything 
>> outside of the request object per JAR but also checks for and enforces the 
>> presence and value of the few regular parameters (client_id, response_type) 
>> that OIDC mandates.
>>  
>> On Tue, Aug 27, 2019 at 5:47 AM Filip Skokan <panva...@gmail.com 
>> <mailto:panva...@gmail.com>> wrote:
>> Hello everyone,
>>  
>> in an earlier thread I've posed the following question that might have 
>> gotten missed, this might have consequences for the existing implementations 
>> of Request Objects in OIDC implementations - its making pure JAR requests 
>> incompatible with OIDC Core implementations.
>>  
>> draft 14 of jwsreq (JAR) introduced this language
>>  
>> The client MAY send the parameters included in the request object
>> duplicated in the query parameters as well for the backward
>> compatibility etc.  However, the authorization server supporting this
>> specification MUST only use the parameters included in the request
>> object. 
>>  
>> Server MUST only use the parameters in the Request Object even if the
>> same parameter is provided in the query parameter.  The Authorization
>>  
>> The client MAY send the parameters included in the request object
>> duplicated in the query parameters as well for the backward
>> compatibility etc.  However, the authorization server supporting this
>> specification MUST only use the parameters included in the request
>> object.. 
>>  
>> Nat, John, everyone - does this mean a JAR compliant AS ignores everything 
>> outside of the request object while OIDC Request Object one merges the two 
>> with the ones in the request object being used over ones that are sent in 
>> clear? The OIDC language also includes sections which make sure that some 
>> required arguments are still passed outside of the request object with the 
>> same value to make sure the request is "valid" OAuth 2.0 request (client_id, 
>> response_type), something which an example in the JAR spec does not do. Not 
>> having this language means that existing authorization request pipelines 
>> can't simply be extended with e.g. a middleware, they need to branch their 
>> codepaths.
>>  
>> Is an AS required to choose which of the two it follows?
>>  
>> Thank you for clarifying this in advance. I think if either the behaviour is 
>> the same as in OIDC or different this should be called out in the language 
>> to avoid confusion, especially since this already exists in OIDC and likely 
>> isn't going to be read in isolation, especially because the Request Object 
>> is even called out to be already in place in OIDC in the JAR draft.
>>  
>> Best,
>> Filip
>> _______________________________________________
>> OAuth mailing list
>> OAuth@ietf.org <mailto:OAuth@ietf.org>
>> https://www.ietf.org/mailman/listinfo/oauth 
>> <https://www.ietf.org/mailman/listinfo/oauth>
>>  
>> CONFIDENTIALITY NOTICE: This email may contain confidential and privileged 
>> material for the sole use of the intended recipient(s)... Any review, use, 
>> distribution or disclosure by others is strictly prohibited.  If you have 
>> received this communication in error, please notify the sender immediately 
>> by e-mail and delete the message and any file attachments from your 
>> computer. Thank you.
>> 
>> CONFIDENTIALITY NOTICE: This email may contain confidential and privileged 
>> material for the sole use of the intended recipient(s). Any review, use, 
>> distribution or disclosure by others is strictly prohibited..  If you have 
>> received this communication in error, please notify the sender immediately 
>> by e-mail and delete the message and any file attachments from your 
>> computer. Thank you._______________________________________________
>> OAuth mailing list
>> OAuth@ietf.org <mailto:OAuth@ietf.org>
>> https://www.ietf.org/mailman/listinfo/oauth 
>> <https://www.ietf.org/mailman/listinfo/oauth>
>> -- 
>> Nat Sakimura (=nat)
>> Chairman, OpenID Foundation
>> http://nat.sakimura.org/ <http://nat.sakimura.org/>
>> @_nat_en
>> _______________________________________________
>> OAuth mailing list
>> OAuth@ietf.org <mailto:OAuth@ietf.org>
>> https://www.ietf.org/mailman/listinfo/oauth 
>> <https://www.ietf.org/mailman/listinfo/oauth>
>> 
>>  
>> -- 
>> Nat Sakimura (=nat)
>> Chairman, OpenID Foundation
>> http://nat.sakimura.org/ <http://nat.sakimura.org/>
>> @_nat_en
>> _______________________________________________
>> OAuth mailing list
>> OAuth@ietf.org <mailto:OAuth@ietf.org>
>> https://www.ietf.org/mailman/listinfo/oauth 
>> <https://www.ietf.org/mailman/listinfo/oauth>
>> _______________________________________________
>> OAuth mailing list
>> OAuth@ietf.org <mailto:OAuth@ietf.org>
>> https://www.ietf.org/mailman/listinfo/oauth 
>> <https://www.ietf.org/mailman/listinfo/oauth>
>>  
>>  
>> 
>> 
>> _______________________________________________
>> OAuth mailing list
>> OAuth@ietf.org <mailto:OAuth@ietf.org>
>> https://www.ietf.org/mailman/listinfo/oauth 
>> <https://www.ietf.org/mailman/listinfo/oauth>
> _______________________________________________
> OAuth mailing list
> OAuth@ietf.org <mailto:OAuth@ietf.org>
> https://www.ietf.org/mailman/listinfo/oauth 
> <https://www.ietf.org/mailman/listinfo/oauth>
_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to