On Thu, Apr 15, 2010 at 6:31 PM, Marius Scurtescu <mscurte...@google.com>wrote:

> OK, here is a concrete example:
>
> A Drupal (popular PHP based CMS) based web site wants to become an
> OAuth 2 client. Among other things it needs to implement a callback
> endpoint.
>
> Ideally this endpoint would look something like:
> http://example.com/oauth/back
>
> Depending on what web server is used and how it is configured, the
> above URL may not be possible. Drupal is dispatching all requests
> through the main script and the path of the endpoint is passed as a
> query parameter. Normally the above URL is seen as:
> http://example.com/index.php?q=oauth/back
>
> The cleaner http://example.com/oauth/back is achieved with Apache URl
> rewriting, but if Apache is not available or configured to support
> that, you are stuck with the ugly query parameters.
>
> In the unlucky case the registered callback, and the actual callback
> used in messages, is "http://example.com/index.php?q=oauth/back";. This
> callback has a query parameter, it is not used for state, and it is
> not an extension.
>
> It so happens that "q" will not conflict with any of the existing
> OAuth 2 parameters, but you can see the potential issue.
>
> Now, even if Apache is available and URL rewrites work, so the nice
> callback is used, a collision would still happen if "q" was used by
> OAuth 2. Apache rewrites "/oauth/back", but the Drupal dispatcher
> always sees "/index.php?q=oauth/back", so another q parameter would
> break things.
>

We should ask Drupal to change their query parameter to drupal_q.


>
> I do realize that a prefix will not solve ALL collisions and it is
> also not solving the extension question, but I still think makes a big
> difference.
>

This use case makes sense, but do we know of any existing conflicts?

Very few web servers have this restrictive a URL parameter policy - I think
I'm OK losing compatibility with future web servers that reserve the
"callback" parameter for other purposes.


> Hope this helps,
> Marius
>
>
>
> On Thu, Apr 15, 2010 at 12:44 PM, Eran Hammer-Lahav <e...@hueniverse.com>
> wrote:
> >
> >
> >
> > On 4/15/10 12:36 PM, "Marius Scurtescu" <mscurte...@google.com> wrote:
> >
> >> On Thu, Apr 15, 2010 at 12:27 PM, Eran Hammer-Lahav <
> e...@hueniverse.com>
> >> wrote:
> >>>
> >>> On 4/15/10 12:15 PM, "Marius Scurtescu" <mscurte...@google.com> wrote:
> >>>
> >>>> I really think we should keep a standard parameter prefix like
> >>>> "oauth_". What are the issue with having a prefix?
> >>>
> >>> I really think we shouldn't. :-)
> >>>
> >>> Requests are longer for no reason.
> >>
> >> Not much longer, the number of parameters is small. Why is this a
> problem?
> >
> > It's longer for no reason.
> >
> >>
> >>> You need to show how a prefix actually
> >>> helps. Otherwise, it is the same as adding an 'protocol=oauth' to every
> >>> request just for fun.
> >>
> >> I think I did.
> >
> > Say it helps isn't proof, just an argument.
> >
> >>
> >>>> Not having such a prefix will lead to collisions with query parameter
> >>>> on the authz server endpoints
> >>>
> >>> Having a prefix without an extension policy does not help at all to
> prevent
> >>> collisions. This is a false expectation. There is no difference between
> >>> saying 'don't add new parameters with the oauth_ prefix' or 'don't add
> new
> >>> parameters with names already used by this specification'.
> >>
> >> I agree this is not perfect, but that does not mean it does not help.
> >>
> >> It is one thing to say to implementors to stay away from parameters
> >> stating with "oauth_" and a totally different thing to say stay away
> >> from "scope", "mode", "callback", ... and whatever we will add to
> >> newer versions to the spec. All these are very common words and
> >> chances for collision are high.
> >
> > So what happens when someone wants to add a language parameter? Do they
> call
> > is 'language' or 'oauth_language'? The prefix just doesn't solve anything
> > without a policy, and once you write a policy it is no longer needed.
> >
> >>
> >>>> or on the callback URL. Even if state is
> >>>> not passed with additional parameters on callbacks. This also leads to
> >>>> adding further limitations on these URLs, by not allowing query
> >>>> parameters.
> >>>
> >>> Callback parameters are a bit different. We still need to solve the
> issue of
> >>> how to allow client state in callbacks (state parameter or
> free-for-all).
> >>> But here too, a prefix does not solve collisions. You have the same
> >>> extension policy issue.
> >>
> >> State aside, the callback may want to have query parameters, even in
> >> the registered version. Why disallow that?
> >
> > I don't think it should, but I am opposed to both random parameters and a
> > client state parameter. Either way, that's a different issue - let's try
> to
> > keep this focused on one issue at a time.
> >
> >>
> >>> A prefix just "solves" potential collision between the core spec and
> other
> >>> specs using the same parameter names. It does not help how to avoid
> >>> collisions between extensions and vendors. OAuth 1.0a had a prefix and
> then
> >>> we spent weeks discussion who else can define oauth_ parameters. It
> just
> >>> moved the problem somewhere else - the extension policy.
> >>
> >> Not trying to solve the extension issue at all.
> >
> > This is all about extensions (common or vendor specific)!
> >
> > EHL
> >
> >>
> >> Marius
> >>
> >>>
> >>>> Marius
> >>>>
> >>>>
> >>>>
> >>>> On Thu, Apr 15, 2010 at 12:08 PM, John Kemp <j...@jkemp.net> wrote:
> >>>>> Hello,
> >>>>>
> >>>>> On Apr 15, 2010, at 2:27 PM, Eran Hammer-Lahav wrote:
> >>>>>
> >>>>>> OAuth 2.0 flows use a single authorization endpoint (with 'type'
> >>>>>> parameter).
> >>>>>> This endpoint is OAuth-specific but must allow for extension
> parameters
> >>>>>> (standard or vendor-specific).
> >>>>>>
> >>>>>> The issue is how to best allow for extensions defining new
> parameters. The
> >>>>>> danger is common parameter names ('scope', 'language', 'permission')
> being
> >>>>>> used differently by different vendors, creating interop issues with
> >>>>>> libraries.
> >>>>>
> >>>>> If the OAuth specification defines the name for a parameter, and
> people
> >>>>> claim
> >>>>> to implement the specification, they must use those parameter names
> >>>>> according
> >>>>> to the specified usage. In other words, implementations of OAuth
> should all
> >>>>> do the same thing, and use the same names for the OAuth-specific
> >>>>> parameters.
> >>>>> But, deployments of OAuth will use OAuth implementations and possibly
> have
> >>>>> additional requirements (such as passing other query string
> parameters
> >>>>> which
> >>>>> may collide with the OAuth ones). And particular OAuth vendors may
> add
> >>>>> other
> >>>>> extension parameters (agreed between particular implementations but
> not
> >>>>> perhaps within the entire community) to the query string. All of that
> might
> >>>>> be covered by "conformance to the specification" - conformant
> >>>>> implementations
> >>>>> MUST not define parameters with names that clash with the agreed
> OAuth
> >>>>> names.
> >>>>>
> >>>>>>
> >>>>>> Prefix alone (for the core or extensions) does not solve the problem
> since
> >>>>>> extensions still suffer from potential namespace collision.
> >>>>>
> >>>>> Right. You cannot solve this problem. The danger is for those who
> don't
> >>>>> read
> >>>>> the spec. (because they don't have to - they are buying a product, or
> using
> >>>>> a
> >>>>> library).
> >>>>>
> >>>>>> 'oauth_' prefix
> >>>>>> makes all the parameter names longer, but doesn't add real value -
> >>>>>> defining
> >>>>>> new parameters, with or without the 'oauth_' prefix is still the
> same
> >>>>>> problem.
> >>>>>>
> >>>>>> The typical solution is to define an extension policy, using a
> registry or
> >>>>>> domain-namespace for new names.
> >>>>>>
> >>>>>> Proposal:
> >>>>>>
> >>>>>> Plain parameter names (names without '.' character) require
> registration
> >>>>>> (IANA registry with a published specification). This will encourage
> people
> >>>>>> to share their parameters and improve interop beyond the core
> protocol
> >>>>>> parameters.
> >>>>>
> >>>>> It will - how?
> >>>>>
> >>>>>>
> >>>>>> Vendor specific names will require a prefix using either registered
> vendor
> >>>>>> names (e.g. 'google', 'fb', 'yahoo').
> >>>>>
> >>>>> How will you *require* this - will there be a statement to that
> effect in
> >>>>> the
> >>>>> specification - "conformant implementations MUST NOT define query
> >>>>> parameters
> >>>>> that clash withe names int he OAuth registry "? What will you do
> about
> >>>>> deployments which include an OAuth library and do not know anything
> at all
> >>>>> about the OAuth requirements?
> >>>>>
> >>>>>> Alternatively, use the same extension
> >>>>>> policy as OpenID where extensions use any prefix and include a
> prefix URI
> >>>>>> identifier (e.g.
> >>>>>> http://example.com?etx.language=en&ns:ext=http://example.com/spec1
> ).
> >>>>>>
> >>>>>
> >>>>> What do you consider an "extension" for this purpose (some parameter
> agreed
> >>>>> on by two or more conforming OAuth implementations)?
> >>>>>
> >>>>> - johnk
> >>>>>
> >>>>>> EHL
> >>>>>>
> >>>>>> _______________________________________________
> >>>>>> 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