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())) {
>> >> >
>> >>
>>

Reply via email to