我的应用程序在客户端运行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)
但我不清楚我是在发送整个令牌对象还是只发送访问令牌值。
答案 0 :(得分:0)
步骤就像这样
在服务器端,您只需发送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客户端库。