如何完成OAuth Google登录?

时间:2016-10-18 03:15:46

标签: python reactjs flask oauth

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

我在客户端收到了来自Google的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})

My Flask服务器已识别:

@app.route('/gconnect', methods=['POST'])
def gconnect():
token = request.data

我从哪里开始? 在文档上,它说我可以通过将令牌发送到此链接来验证令牌: 'https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=%s'%(tokenid)

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

1 个答案:

答案 0 :(得分:0)

步骤就像这样

  1. 用户成功连接到您的应用后获取Google身份验证数据。
  2. 用户成功登录后,使用HTTPS将用户的ID令牌发送到您的服务器。
  3. 然后,在服务器上,验证ID令牌的完整性,并从ID令牌的子声明中检索用户的ID。
  4. 在服务器端,您只需发送id_token而不需要其他内容。

    现在验证传递给黑化服务器的ID令牌的完整性,在你的情况下是烧瓶。

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

    https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=XYZ123
    

    如果令牌已正确签名且有效,您将收到HTTP 200响应,其中正文包含JSON格式的ID令牌声明。

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

    要发送验证id_token的请求,您可以使用任何python库发出http请求,或者您可以使用google客户端库进行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']
    

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