Search code examples
google-signingoogle-oauthgoogle-api-python-client

unable to exchange auth token with access token - redirect uri missmatch


I try to build below:

enter image description here

by following: this steps

however, i keep receiving redirect uri missmatch when i tried to exchange auth code (given by my mobile app) to google server - which i couldn't understand because technically there is no redirect uri required for my flow case...

here are the details:

in Android Client:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestScopes(new Scope(Scopes.DRIVE_APPFOLDER))
        .requestServerAuthCode(serverClientId, false)
        .build();
/**** bla.... ****/
GoogleSignInAccount acct = result.getSignInAccount();
String authCode = acct.getServerAuthCode();
/**** android app will send this authCode to my server ****/
/**** sample authCode: 4/Jny2Mxxx3x09sy4pqY3ZAwSTEz8rw2xxxxC-4VxxxxM

in my backend server:

try:
    # i receive authCode correctly from android app.
    # and use authCode to exchange to Access Token to google server as below:
    credentials = client.credentials_from_clientsecrets_and_code(
                  app.config.get('GG_APP_SECRET'),
                  ['https://www.googleapis.com/auth/plus.me', 'profile', 'email'],
                  authCode)
except Exception as e:
    log.info('>>>>> I always receive: redirect uri missmatch here: %s <<<<<', e)
    return generate_response(code=400, error=False, type='Fail', message=str(e))

this is curl from my backend server:

curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{ \ 
   "authCode": "4/HP_cP_t70pgBrxxx7sjzCil7kaUHkxxxerdkMxxxrRg" \ 
 }' 'http://localhost:5005/api/user/register/gg'

this is my console settings:

enter image description here

Questions:

is the serverClientId in android client suppose to be the clientID of above image?

what is the redirect uri that i should put in google console above?

what should i set/configure for my redirect uri? or is there any specific settings that i need to do?


Solution

  • Ok I go it,

    if you see this

    you will found out:

    def credentials_from_clientsecrets_and_code(filename, scope, code,
                                                message=None,
                                                redirect_uri='postmessage',
                                                http=None,
                                                cache=None,
                                                device_uri=None):
    

    and you realize that redirect_uri = 'postmessage' which in my case i dont have post message.

    so what i do is to match that redirect_uri with authorize redirect uri that i have in google console

    so for my case in my question above, i change my python code to:

    credentials = client.credentials_from_clientsecrets_and_code(
                      app.config.get('GG_APP_SECRET'),
                      ['https://www.googleapis.com/auth/plus.me', 'profile', 'email'],
                      authCode, redirect_uri='https://developers.google.com/oauthplayground')