无法使用访问令牌交换身份验证令牌 - 重定向uri missmatch

时间:2017-07-07 14:16:25

标签: google-oauth google-signin google-oauth2 google-api-python-client

我尝试在下面构建:

enter image description here

通过以下方式:this步骤

但是,当我尝试将auth代码(由我的移动应用程序提供)交换到谷歌服务器时,我一直收到重定向uri missmatch - 我无法理解,因为从技术上讲,我的流量案例不需要重定向uri ...

以下是详细信息:

Android客户端中的

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

在我的后端服务器中:

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

这是我后端服务器的卷曲:

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'

这是我的控制台设置:

enter image description here

问题:

是android客户端中的serverClientId,假设是上面图像的clientID?

我应该在谷歌控制台上面放置什么重定向uri?

我应该为我的重定向uri设置/配置什么?或者我需要做哪些具体设置?

1 个答案:

答案 0 :(得分:0)

好的,我去了,

如果您看到this

你会发现:

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

你意识到redirect_uri ='postmessage'在我的情况下我没有发布消息。

所以我要做的是将redirect_uri与我在谷歌控制台中的authorize redirect uri相匹配

所以对于我在上面的问题中的情况,我将我的python代码更改为:

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')