Apparently, the description in the JAR spec has made some AS implementers,
at least Vladimir - Connect2id and Filip - node-oidc-provider, decide to
devise a workaround, and the approach (preparing a configuration switch) is
attracting Taka (me) - Authlete, too. This may be a typical answer by AS
implementers who face compatibility-breaking and interoperability-breaking
issues, although I personally prefer to modify the specification itself to
allow old/new RPs and ASes to coexist seamlessly. If the current draft is
not modified any more, I will probably prepare per-AS and per-RP
configuration switches. Anyway, this is feedback from AS implementers.

If preparing a configuration switch is a typical answer by AS implementers,
it might be good to define a new IdP metadata about JAR support (e.g.
strict, lax, whitelist, as Filip showed). Rather, the existence of such
metadata might be a must for the automated regular tests
<https://gitlab.com/openid/conformance-suite/-/wikis/Users/How-to-be-added-to-the-regular-automated-tests-run>
of conformance suite, but I'm not sure and want to consult Joseph Heenan
regarding this.

Best,
Taka


On Mon, Jan 6, 2020 at 6:43 PM Filip Skokan <panva...@gmail.com> wrote:

> I don't think we have the separation of OAuth and non-OAuth parameters and
> let's please not. Even OIDC parameters are part of the OAuth parameters
> registry
> <https://www.iana.org/assignments/oauth-parameters/oauth-parameters.xhtml#parameters>
>  and
> I cannot imagine the hardship if we were to explain that to developers.
>
> With passing time I believe it should be up to the profile or application
> of JAR to define how to treat *recognized* parameters outside of the
> request object. In my personal OSS project the AS can be configured to be
> *strict* (jar), *lax* (oidc merge all) or *whitelist* (merge only
> whitelisted - code_challenge, nonce, state, ...) similar to what Vladimir
> is describing.
>
> S pozdravem,
> *Filip Skokan*
>
>
> On Mon, 6 Jan 2020 at 07:05, n-sakimura <n-sakim...@nri.co.jp> 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
>>
>> 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> 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> 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> 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> wrote:
>>
>> So, no change is OK?
>>
>>
>>
>> On Wed, Dec 11, 2019 at 10:01 PM John Bradley <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> 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 <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> 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>
>> 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> 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
>> 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
>> 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
>> 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
>> 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

Reply via email to