So here's the breakdown of how the redirect uri works:



- If the client sends a redirect URI to the auth endpoint, and the client has registered one or more redirect URIs, it MUST match one of the redirect URIs it had registered. (for a soft definition of "match" -- it can be prefix, or pattern, or exact string, so long as the AS knows how to do it, IIRC) - If the client does not send a redirect URI to the auth endpoint, and the client has either only registered one or the AS has some notion of a "default" redirect URI, the AS will just use that one.

Now the part that seems to trip people up:

- If the client had sent a redirect URI to the auth endpoint, then it MUST send the EXACT SAME redirect URI to the token endpoint. This request is back-channel and protected with the client's credentials. - If the client did not send a redirect URI to the auth endpoint, then it does NOT send a redirect URI to the token endpoint.


So here's where the protection comes in. If the attacker modifies the request to the auth endpoint so that it has a different redirect URI, then that redirect URI MUST match one that's attached to the client_id in the request. Furthermore, the call to the token endpoint to get the token MUST also contain that modified redirect URI as well as any client credentials needed to make the call. A "good" client will send a "good" redirect URI, even if the code has been sent someplace else in the mean time.

Hope this clears things up,

 -- Justin

On 11/29/2012 04:24 PM, Ariel Barreiro wrote:
But isn't having a registered redirect URI on the authorization end point enought to prevent this, why is it required to send the redirect URI to the token end point if the previous method prevents it?

I appreciate a lot your response but I am still finding it hard to picture it, and, was in your explanation a modification to the request URI?


On Thu, Nov 29, 2012 at 6:25 PM, John Bradley <[email protected] <mailto:[email protected]>> wrote:

    A confidential client authenticates to the token endpoint
    preventing an attacker from getting the token.

    In the case of a public client if you get the code and redirect
    URI then you can get the token.  (Why confidential clients are
    better than public ones)

    Sending the redirect URI to the token endpoint protects the client
    from the case where client A gets a code for user B because the
    user logged into A and A is using the client ID of client Z
    because it wants to impersonate user B at client A.   Client A
    pretending to be client Z  can easily get the code.  However the
    redirect URI that the real client Z sends will be different than
    the one the fake client Z used to get code and the real client A
    won't be able to exchange the code for a access token and be
    tricked into thinking that the resource owner is the one
    presenting it the code.

    That is the long explanation.  The short one is unregistered
    redirect URI are bad.   Sending the redirect URI to the token
    endpoint protects clients from becoming confused about the
    presenter of the code.
    Nothing is going to help a public client if someone intercepts code.

    John B.

    On 2012-11-29, at 3:05 PM, Ariel Barreiro <[email protected]
    <mailto:[email protected]>> wrote:

    Still  I can't see how to prevent the attack. I understand that
    there is no redirection when requesting an access token, however,
    the protocol requests the client to send the redirect_uri to the
    token end point to validate it was the same used in the
    authorization. If the authorization was compromised, couldn't the
    access token request be forged as well?


    On Thu, Nov 29, 2012 at 4:01 PM, Phil Hunt <[email protected]
    <mailto:[email protected]>> wrote:

        There is no redirection when requesting an access token.
         Token requests are typically out-of-band from the user.  The
        attack only happens during an authorization redirect flow in
        the browser.

        Phil

        @independentid
        www.independentid.com <http://www.independentid.com/>
        [email protected] <mailto:[email protected]>





        On 2012-11-29, at 9:53 AM, Ariel Barreiro wrote:

        > I am struggling a bit to understand this attack and the
        advice in to how to prevent. I understand that if I, as an
        attacker, can change the redirection uri when authorizing,
        can not it as well change the redirect uri when requesting an
        access token?
        >
        > Any explanation examples on how this attack might work and
        how sending the redirect_uri when requesting the access toekn
        prevents it are welcomed.
        >
        > Thanks,
        > Ariel.=
        > _______________________________________________
        > OAuth mailing list
        > [email protected] <mailto:[email protected]>
        > https://www.ietf.org/mailman/listinfo/oauth


    _______________________________________________
    OAuth mailing list
    [email protected] <mailto:[email protected]>
    https://www.ietf.org/mailman/listinfo/oauth




_______________________________________________
OAuth mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/oauth

_______________________________________________
OAuth mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to