Python 如何完成OAuth Google登录?

Python 如何完成OAuth Google登录?,python,reactjs,flask,oauth,Python,Reactjs,Flask,Oauth,我的应用程序在客户端运行React和Redux,在服务器端运行Flask 我在我的客户机上收到了来自谷歌的OAUTH令牌,形式如下: Object { El: "109087143026456349612", Zi: Object, w3: Object, googleId: "109087143026456349612", tokenObj: Object, tokenId: "eyJhbGciOiJSUzI1NiIsImtpZCI6IjUxNjE…", accessToken:

我的应用程序在客户端运行React和Redux,在服务器端运行Flask

我在我的客户机上收到了来自谷歌的OAUTH令牌,形式如下:

 Object { El: "109087143026456349612", Zi: Object, w3: Object, googleId:   
 "109087143026456349612", tokenObj: Object, tokenId:
 "eyJhbGciOiJSUzI1NiIsImtpZCI6IjUxNjE…", accessToken: "ya29.Ci-
 AAyPxYI7qVyKp2QTwadhiVtc9Qg…", profileObj: Object }
我通过将整个令牌对象发送到服务器

 axios.post(`${local_env_url}/gconnect`, {returnData})
我的Flask服务器已识别为:

@app.route('/gconnect', methods=['POST'])
def gconnect():
token = request.data
我该怎么办? 在文档上,它说我可以通过将令牌发送到此链接来验证令牌: ''(令牌ID)

但不清楚是发送整个令牌对象还是仅发送访问令牌值。

步骤如下

  • 在用户成功连接到您的应用程序后获取google auth数据
  • 用户成功登录后,使用HTTPS将用户的ID令牌发送到服务器
  • 然后,在服务器上,验证ID令牌的完整性,并从ID令牌的子声明中检索用户的ID 在服务器端,您只需发送
    id\u令牌
    ,而无需发送其他内容

    现在,验证传递到您的Blacked服务器的ID令牌的完整性,在您的情况下,该服务器是flask

    从服务器端,您需要发出http请求以验证到此端点的ID令牌-

    https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=XYZ123
    
    如果令牌已正确签名且有效,您将得到HTTP 200响应,其中正文包含JSON格式的ID令牌声明

    您可以从服务器端收到的响应中获取所有用户信息

    要发送验证id_令牌的请求,可以使用任何python库发出http请求,也可以使用google client library for python-

    from oauth2client import client, crypt
    
    # (Receive token by HTTPS POST)
    
    try:
        idinfo = client.verify_id_token(token, CLIENT_ID)
        # If multiple clients access the backend server:
        if idinfo['aud'] not in [ANDROID_CLIENT_ID, IOS_CLIENT_ID, WEB_CLIENT_ID]:
            raise crypt.AppIdentityError("Unrecognized client.")
        if idinfo['iss'] not in ['accounts.google.com', 'https://accounts.google.com']:
            raise crypt.AppIdentityError("Wrong issuer.")
        if idinfo['hd'] != APPS_DOMAIN_NAME:
            raise crypt.AppIdentityError("Wrong hosted domain.")
    except crypt.AppIdentityError:
        # Invalid token
    userid = idinfo['sub']
    

    更多信息-关于如何使用谷歌客户端库。

    谢谢,我昨晚已经解决了这一部分。最后一部分,当我验证令牌时,我是否将其发送回客户端以存储在localStorage中,并在每次调用我的服务器时检查它?不要存储它。您可以使用
    gapi
    获取令牌。