Good to know indeed. Guess it would be nice then to also apply the attached patch, which adds a package-info.java file for the oauth2 package. :)
I'll file a ticket for the original issue in a few minutes. Regards, -- Andreas On Thu, Oct 17, 2013 at 3:00 PM, A Clarke <cla...@gmail.com> wrote: > One thing to keep in mind Andreas is that you are looking at the most > recent OAuth2 specification. When the OAuth2 sample provider was written > D21 was latest revision. The code you're looking at is supposed to comply > with D21. > > I took a quick look at the diagrams and they don't appear to have changed > so I don't think it applies to your problem. > > > On Thu, Oct 17, 2013 at 8:14 AM, Ryan Baxter <rbaxte...@apache.org> wrote: > > > Thanks for the explanation. Sounds like a bug to me as well. > > > > On Thu, Oct 17, 2013 at 4:47 AM, Andreas Kohn <andreas.k...@gmail.com> > > wrote: > > > Hi, > > > > > > On Thu, Oct 17, 2013 at 2:26 AM, Ryan Baxter <rbaxte...@apache.org> > > wrote: > > > > > >> I guess the wording in Section 4.1.3 is a little confusing to me. > > >> > > >> "ensure that the "redirect_uri" parameter is present if the > > >> "redirect_uri" parameter was included in the initial > authorization > > >> request as described in Section 4.1.1 > > >> <http://tools.ietf.org/html/rfc6749#section-4.1.1>, and if included > > >> ensure that > > >> their values are identical." > > >> > > >> What is the "initial authorization request"? Is that referring to the > > >> servletRequest in the code? If so that to me it seems like the code > > >> is correct. > > >> > > > > > > The "(initial) authorization request" is the request that was sent > > earlier > > > in the code flow with the response_type=code parameter. The "access > token > > > request" of section 4.1.3 is the *next* request, with > > > grant_type=authorization_code. As such, no, this does not refer to the > > > current servlet request (an implementation detail that also happens to > be > > > named 'request' :D). > > > > > > Looking at the diagram of section 4.1 ( > > > http://tools.ietf.org/html/rfc6749#section-4.1): The "authorization > > > request" is the marked with (A), the "authorization response" is (C), > the > > > "access token request" is (D), and the "access token response" is (E). > > > > > > Regards, > > > -- > > > Andreas > > > > > > > > > > > >> > > >> On Wed, Oct 16, 2013 at 8:52 AM, Andreas Kohn <andreas.k...@gmail.com > > > > >> wrote: > > >> > Hi, > > >> > > > >> > On Wed, Oct 16, 2013 at 2:04 PM, Stanton Sievers < > ssiev...@apache.org > > >> >wrote: > > >> > > > >> >> You're concerned about the use case where > > >> >> the redirect_uri was omitted from the authorization request (which > is > > >> valid > > >> >> since it is optional per section 4.1.1) yet a redirect_uri was > > provided > > >> on > > >> >> the access token request? > > >> > > > >> > > > >> > No, at that part the redirect_uri is indeed optional, and from what > I > > can > > >> > see the RFC doesn't say anything about providing a redirect_uri in > the > > >> > token request if there was none provided in the authorization > request. > > >> > However, _iff_ a redirect_uri is given with the authorization > request, > > >> > _then_ the access token request must also include it (4.1.3), and it > > must > > >> > match (ibd.). > > >> > > > >> > If I'm reading the logic for that part correctly though Shindig > allows > > >> the > > >> > access token request to not specify a redirect_uri, and in that case > > it > > >> > will not check whether the authorization request had one specified. > In > > >> > other words: it will provide a client that has an authcode with a > > token > > >> > without validating that the authcode redirect URI is correct. > > >> > > > >> > Does that make sense? > > >> > > > >> > -- > > >> > Andreas > > >> > > > >> > In this particular case, due to the logic you > > >> >> mentioned, an exception would be thrown because the redirect_uris > do > > not > > >> >> match. > > >> >> > > >> >> Is that the case you are running into? > > >> >> > > >> >> Thanks, > > >> >> -Stanton > > >> >> > > >> >> > > >> >> On Wed, Oct 16, 2013 at 6:54 AM, Andreas Kohn < > > andreas.k...@gmail.com > > >> >> >wrote: > > >> >> > > >> >> > Hi, > > >> >> > > > >> >> > I'm currently stepping through the logic for handling OAuth2 > > >> requests, at > > >> >> > the same time reading through RFC 6749 and trying to wrap my head > > >> around > > >> >> > what's going on :) > > >> >> > > > >> >> > I noticed that in AuthCodeGrantValidator#validateRequest() a > > condition > > >> >> > states "if servlet request has a redirect_uri, then it must match > > the > > >> one > > >> >> > stored in the authcode"[1], but from my reading of the RFC it > > should > > >> be > > >> >> "if > > >> >> > authcode has a redirect_uri, then the servlet request must > specify > > the > > >> >> same > > >> >> > one" [2][3]. > > >> >> > > > >> >> > Am I missing something? > > >> >> > > > >> >> > Regards, > > >> >> > -- > > >> >> > Andreas > > >> >> > > > >> >> > [1] > > >> >> > 67 if (servletRequest.getRedirectURI() != null > > >> >> > 68 && > > >> >> > > > !servletRequest.getRedirectURI().equals(authCode.getRedirectURI())) { > > >> >> > 69 OAuth2NormalizedResponse response = new > > >> >> > OAuth2NormalizedResponse(); > > >> >> > 70 response.setStatus(HttpServletResponse.SC_BAD_REQUEST); > > >> >> > 71 response.setError(ErrorType.INVALID_GRANT.toString()); > > >> >> > 72 response > > >> >> > 73 .setErrorDescription("The redirect URI does not > match > > >> the > > >> >> one > > >> >> > used in the authorization request"); > > >> >> > 74 response.setBodyReturned(true); > > >> >> > 75 throw new OAuth2Exception(response); > > >> >> > 76 } > > >> >> > > > >> >> > [2] Section 4.1.3 Access Token Request says > > >> >> > > > >> >> > o ensure that the "redirect_uri" parameter is present if the > > >> >> > "redirect_uri" parameter was included in the initial > > >> authorization > > >> >> > request as described in Section 4.1.1 > > >> >> > <http://tools.ietf.org/html/rfc6749#section-4.1.1>, and if > > included > > >> >> > ensure that > > >> >> > their values are identical. > > >> >> > > > >> >> > > > >> >> > [3] Fix would be to replace lines 67 and 68 with: > > >> >> > if (authCode.getRedirectURI() != null > > >> >> > && > > >> >> > > > !authCode.getRedirectURI().equals(servletRequest.getRedirectURI())) { > > >> >> > > > >> >> > > >> > > >