google-auth-library - 在 Python 中验证 google 的 ID 令牌太慢了
问题描述
我正在使用“ https://developers.google.com/identity/sign-in/ios/backend-auth ”进行编码
令牌是
eyJhbGciOiJSUzI1NiIsImtpZCI6IjI2ZmM0Y2QyM2QzODdjYmM0OTBmNjBkYjU0YTk0YTZkZDE2NTM5OTgiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiIzMjAzMTg3OTI4MTQtcXBnZ2ZscGYxNWhpN3NrbDUzbzR2aXA5cTdhb2QzOWYuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiIzMjAzMTg3OTI4MTQtcXBnZ2ZscGYxNWhpN3NrbDUzbzR2aXA5cTdhb2QzOWYuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMDQwODQzNzYwMjYyNzczNTA0MDgiLCJlbWFpbCI6InVzNDAyNzY5NDExQDE2My5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiYXRfaGFzaCI6InlicUhLQlRPVVM5ZWJwS3FHVmZmcFEiLCJpYXQiOjE1NTYxODI0MTksImV4cCI6MTU1NjE4NjAxOX0.ABE-rltHIdEfxHwVHXMpcwg1HdoKarrGEcj2gqRAtegDpjelxdqnQslcA4V7nm_mZx_eqkw54FiWeDJ0Rif39kf-hUuBMJdjD4qOzKLqUbyjLgYTy0qi5zZ4vav95K6Y-LeOGTLOGWNiak9t1a3D1y9Xvub24r0t7dU9chqAp7aZnqW_995si_6oJwlPOQCMkfmhkUm9xeYyAWNRsJN6W2rUN41oFUN8KAboUhyjgQFnOdu85KzeDbll_m-HaFYEHh5FdzUnpgt79wKNtFXPnq000EYtHa4AvhtV9MoidMQCx0g02f1PEw4VvAGsQT6MN6Z4cJH-kGl8LHxZA1dslQ
我可以从https://oauth2.googleapis.com/tokeninfo?id_token=TOKEN获取数据
但是当我使用 Google API Client Library 时,我发现它id_token.verify_oauth2_token
太慢而无法获得结果。为什么?我的代码超出了:
from google.oauth2 import id_token
from google.auth.transport import requests
GOOGLE_CLIENT_ID = '320318792814-qpggflpf15hi7skl53o4vip9q7aod39f.apps.googleusercontent.com'
def auth_google(token):
CLIENT_ID = GOOGLE_CLIENT_ID
try:
# Specify the CLIENT_ID of the app that accesses the backend:
idinfo = id_token.verify_oauth2_token(token, requests.Request(), CLIENT_ID)
print idinfo
# Or, if multiple clients access the backend server:
# idinfo = id_token.verify_oauth2_token(token, requests.Request())
# if idinfo['aud'] not in [CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3]:
# raise ValueError('Could not verify audience.')
if idinfo['iss'] not in ['accounts.google.com', 'https://accounts.google.com']:
raise ValueError('Wrong issuer.')
# If auth request is from a G Suite domain:
# if idinfo['hd'] != GSUITE_DOMAIN_NAME:
# raise ValueError('Wrong hosted domain.')
# ID token is valid. Get the user's Google Account ID from the decoded token.
auth_user_id = idinfo['sub']
print auth_user_id
return auth_user_id
except ValueError:
# Invalid token
pass
解决方案
我不确定 Google 的 API 客户端运行速度有多慢。但是,这很可能是因为它首先获取了 Google 的身份验证证书(每天被引用一次)。基本上,由于网络调用而不是繁重的代码,它很慢。
无论哪种方式,尽量不要自己验证令牌,JWT 很容易出错。看看google-auth
pypi,它们提供了简单的身份验证助手。
推荐阅读
- node.js - 如何在 nodeJs 服务器上正确使用 Forest Admin?(与森林快递猫鼬)
- mysql - 如何找到更便宜的产品
- firebase - Firestore,追随者数据结构
- matlab - MATLAB:缺少类时的平均交集(IOU)计算
- python - requests.get(url).json(): JSONDecodeError: 期望值: line 1 column 1 (char 0)
- c - 处理器堆读取和预取
- node.js - DISCORD.JS HTTPError [AbortError]:用户中止了请求
- zsh - 在 npm 脚本中添加 zsh 三元运算符 - 替换错误
- r - 您将如何优化在 R 中划分双变量数据?
- python - 带记忆的动态编程无法正常工作