Search code examples
authenticationoauthgoogle-ads-apigoogle-oauth

Custom local URL results in redirect_uri_mismatch


I am using a custom local URL for development of a project that authenticates with both Google and Adwords using OAuth2.

The entry in my /etc/hosts file looks like:

127.0.0.1 sub.example.dev:3001

In the Google Cloud Platform console I have an OAuth 2.0 client ID setup with:

  • type: Web Application
  • Authorized JavaScript origin: http://sub.example.dev:3001
  • Authorized redirect URIs:
    • http://sub.example.dev:3001/auth/adwords/callback
    • http://sub.example.dev:3001/auth/google/callback

I authenticate with with both Google and Adwords separately. Previously I was using localhost:3001 instead of the custom URL which was working for both Google and Adwords. After switching to the custom local URL the Google auth still works, but when I try to authenticate with Adwords I get a redirect_uri_mismatch error.

The error page tells me that "The redirect URI in the request, sub.example.dev:3001/auth/adwords/callback, does not match the ones authorized for the OAuth client." The URI reported here is exactly the same as what I have as an authorized redirect URI (minus the protocol).

Why does this work with Google OAuth, but not Adwords? How can I get a custom local redirect URL to work with Adwords OAuth?

Thanks!


Solution

  • I found the issue, and there was a hint in the question itself. The redirect URL that I pass during the OAuth flow needs to contain the protocol and I had missed that in my config.

    The redirect URL I was passing in the OAuth flow was sub.example.dev:3001/auth/adwords/callback

    I changed it to http://sub.example.dev:3001/auth/adwords/callback and now it works! :D