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
T: +81(90)60136276
---------------------------------------------------------
PLEASE 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> On Behalf Of Justin Richer
Sent: Friday, January 3, 2020 2:35 AM
To: Takahiko Kawasaki <t...@authlete.com>
Cc: Brian Campbell <bcampbell=40pingidentity....@dmarc.ietf.org>; oauth 
<oauth@ietf.org>; Nat Sakimura <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

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

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
--
Nat Sakimura (=nat)
Chairman, OpenID Foundation
http://nat.sakimura.org/
@_nat_en
_______________________________________________
OAuth mailing list
OAuth@ietf.org<mailto:OAuth@ietf.org>
https://www.ietf.org/mailman/listinfo/oauth


--
Nat Sakimura (=nat)
Chairman, OpenID Foundation
http://nat.sakimura.org/
@_nat_en
_______________________________________________
OAuth mailing list
OAuth@ietf.org<mailto:OAuth@ietf.org>
https://www.ietf.org/mailman/listinfo/oauth
_______________________________________________
OAuth mailing list
OAuth@ietf.org<mailto: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