On 1/23/18 6:21 PM, Mike Jones wrote:
----------------------------------------------------------------------
DISCUSS:
----------------------------------------------------------------------

Thanks to everyone who worked on this specification. I think it's well-written, clear, 
and useful. I fully endorse publication, and intend to ballot "yes" once we 
come to an agreement on the issue I describe below.

The problem I'm running into is the URL synthesis rules described in section
3.1 for multi-tenancy engage in exactly the kind of behavior that RFC 5785 was designed to head 
off: it creates URLs all over the path space of the authority, rather than coralling all 
synthesized URLs to live under only one top-level directory. One of the key aspects of the 
principles of the web architecture is URI opacity 
<https://www.w3.org/TR/webarch/#uri-opacity>, which generally precludes clients from 
synthesizing URLs. RFC 5785 was intended as a very limited carve-out to the principle of URI 
opacity, and was carefully limited to a single top-level path element. This specification 
oversteps that carve-out by exploding the location that "Well-Known" synthesized URLs 
can appear: it literally increases it from one location (the root) to infinite locations (at 
the end of any arbitrary path).

Fortunately, this defect is trivial to fix. Rather than placing .well-known 
path components *after* the path identified by an issuer identifier, you place 
them *before* it, which amends this document's usage to be within the spirit 
intended by RFC 5785. For example, the example in section 3.1:

      GET /issuer1/.well-known/oauth-authorization-server HTTP/1.1
      Host: example.com

Would instead become:

      GET /.well-known/oauth-authorization-server/issuer1 HTTP/1.1
      Host: example.com

Mike> Interesting suggestion.  I would agree with your suggestion if we were 
designing this from scratch.

The problem is that this specification is based the much older and widely deployed 
specification "OpenID Connect Discovery 1.0" 
https://openid.net/specs/openid-connect-discovery-1_0.html, where these semantics are 
defined in the second paragraph of 
https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfig.  This OAuth 
spec removes the OpenID-specific parts of this discovery spec and keeps the rest, while 
remaining compatible with it by design.  As discussed with Mark Nottingham during the 
IANA registration process for the .well-known URI (which he approved), this specification 
writes down what is already industry practice for publishing OAuth metadata - which 
subsets the OpenID Connect metadata to use only the OAuth-specific parts.

The behavior of concatenating the .well-known suffix to the issuer path is hard-coded 
into at an absolute minimum, the eleven client libraries listed in the "RP 
Config" column of http://openid.net/certification/#RPs.  In truth, it's hard-coded 
into essentially every OAuth client library that uses metadata to configure the OAuth 
client software and all the OAuth servers that support multiple tenants.  These could 
number in the hundreds.

An example showing a production deployment of the current method is 
https://login.microsoftonline.com/5608b4e0-e26d-4bd1-8a1a-d57d7ae2af8c/v2.0/.well-known/openid-configuration.
  There are many more.

This spec is explicitly paving cowpaths.  Yes, you suggest a better path that 
could have been taken.  But (torturing the metaphor) it's not where the cows 
are.  We owe it to the industry to codify the widespread and 
sufficiently-well-working existing practice.  Thanks for your understanding of 
this.

I understand the difficulty here, as breaking changes -- especially at this late state -- are a pretty big deal, and I feel bad that this situation has arisen. I'll note that I was not the first to identify this specific "better path that could have been taken"; John Bradley described the same approach over five years ago in a thread that you participated in: <https://bitbucket.org/openid/connect/issues/638/discovery-using-issuer-identifer-w-path>.

One of the key reasons existing external specifications are brought to the IETF is to file off architectural warts such as this. As is standard practice for BOFs involving externally-incubated solutions, there was discussion at the OAUTH BOF regarding change control and breaking changes. Looking at the minutes, a key proponent asserted "we want oauth reviewed, and if problems are found, fixed", while the sponsoring AD clarified: "No one expects bit-for-bit compatibility.... Code can change over time."  I understand the "code can change over time" argument is quite blithe when applied out of the blue, but it seems much more relevant when it was one of the arguments that was made for the very creation of the working group.

Minimally, if we come to some kind of IETF consensus (after looping in the relevant parties) that allows publication of a document that squats on the entire path namespace of HTTP URLs -- and I want to be clear that I don't believe this is possible -- then this document needs to update BCP 190, to amend the following normative requirement on how IETF specifications handle URLs:

   Scheme definitions define the presence, format, and semantics of a
   path component in URIs; all other specifications MUST NOT constrain,
   or define the structure or the semantics for any path component.

   The only exception to this requirement is registered "well-known"
   URIs, as specified by [RFC5785].  See that document for a description
   of the applicability of that mechanism.

To be clear: amending BCP 190 is way, WAY outside the purview and charter of OAUTH. Overriding this normative language would require input from the appropriate community (maybe httpbis, but they're almost closed), and you'd need to build consensus that what we did in BCP 190 -- which was a formal codification of web principles promulgated by the W3C, with roots tracing back to Roy Fielding's thesis that coined the REST concept itself -- was incorrect.

The fundamental problem here is that the cows have been walking through private gardens for years, despite clear rules that say they should not. Breaking out the paving equipment to formally seize that land for OAUTH's exclusive use would only make that transgression so much worse.

----------------------------------------------------------------------
COMMENT:
----------------------------------------------------------------------

Section 1.1: [this is an editorial suggestion that I leave to the editors'
discretion] This document makes use of uncapitalized "must", "should", and 
"may" in places. Please consider using the RFC 8174 boilerplate instead of the RFC 2119 boilerplate.

Mike>   I'd be glad to update to the RFC 8174 boilerplate.

Thanks.

Section 7.2: [this is an important procedural comment that really should be resolved 
prior to publication] The addition of restrictions to registries established by RFC 6749 
would seem to require that this document formally include "Updates: RFC6749" in 
its metadata, as well as a mention of such an update in its Abstract and Introduction 
sections.

Mike> I've actually worked with the IESG and IANA in the past to update the instructions for 
existing registries.  https://tools.ietf.org/html/rfc7638#section-6 adds to the instructions to the 
Designated Experts for three existing registries.  The way IANA did this was to add [RFC7638] to the 
References lists in the registries themselves.  For instance, see that the instructions for the 
"JSON Web Key Types" registry at 
https://www.iana.org/assignments/jose/jose.xhtml#web-key-types has a References value of 
"[RFC7518][RFC7638]".  RFC 7618 did not update RFC 7518 - only the registry established by 
it.  I propose that we follow this precedent and do the same thing here.


If there's precedent, I'm okay going along with that.

/a

_______________________________________________
OAuth mailing list
OAuth@ietf.org
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to