如何无需浏览器自动化工具,通过Firebase认证实现网站自动登录并获取Bearer Token?
无浏览器自动化获取目标网站Bearer Token方案
1. 修复Google OAuth客户端授权问题
- 你遇到的"受众未获授权"错误,核心是Google ID Token的aud字段与目标网站Firebase项目的客户端ID不匹配。先通过目标网站的前端源码或登录请求的网络日志,找到它使用的Firebase Web客户端ID(即aud值)。
- 在Google Cloud Console的OAuth 2.0客户端设置中,将该aud值添加到授权的JavaScript来源(如果是Web客户端),同时确保你的Google账号已被加入目标Firebase项目的测试用户列表(若网站限制了测试用户)。
2. 用OAuth授权码流程获取长期刷新令牌
无需浏览器自动化,只需手动完成一次授权,后续即可自动获取Token:
- 在Google Cloud Console创建Web类型OAuth客户端,设置重定向URI为
http://localhost:8080。 - 构造授权URL并在浏览器打开(用目标网站绑定的Google账号登录):
https://accounts.google.com/o/oauth2/v2/auth?client_id=你的客户端ID&redirect_uri=http://localhost:8080&response_type=code&scope=openid email profile&access_type=offline&prompt=consent - 授权后从回调URL中提取
code参数,用它换取刷新令牌和初始ID Token:import requests token_endpoint = "https://oauth2.googleapis.com/token" payload = { "client_id": "你的客户端ID", "client_secret": "你的客户端密钥", "code": "获取到的授权code", "redirect_uri": "http://localhost:8080", "grant_type": "authorization_code" } res = requests.post(token_endpoint, data=payload) token_data = res.json() # 把refresh_token存到本地文件,后续重复使用 - 每日自动用refresh_token换取新的ID Token(即目标网站的Bearer Token):
refresh_payload = { "client_id": "你的客户端ID", "client_secret": "你的客户端密钥", "refresh_token": "保存的refresh_token", "grant_type": "refresh_token" } refresh_res = requests.post(token_endpoint, data=refresh_payload) new_bearer_token = refresh_res.json()["id_token"] # 将new_bearer_token带入Scrapy的请求头中
3. 验证Token有效性
获取Token后,可通过Google的验证接口确认是否符合要求:
import requests verify_url = f"https://www.googleapis.com/oauth2/v3/tokeninfo?id_token={new_bearer_token}" verify_res = requests.get(verify_url) print(verify_res.json())
重点检查aud字段是否与目标网站的Firebase客户端ID一致,email是否为绑定账号,确认匹配后再用于爬取请求。
内容的提问来源于stack exchange,提问作者Phi Ph
相关产品推荐
相关产品推荐

