You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python绕过2FA获取Bearer token以定期访问私有API

解决OAuth2私有API定期访问的2FA与Token续期问题

核心思路:优先利用OAuth2的Refresh Token机制

既然网站采用OAuth v2协议,不要直接绕2FA,先看是否能获取refresh_token——这是OAuth2标准里用来续期access_token(也就是你说的Bearer token)的凭证,通常有效期远长于access token,甚至是长期有效。

  • 手动完成一次完整登录(包括短信2FA),在登录成功后的API响应或开发者工具的网络请求里,查找包含refresh_token的返回值(一般在OAuth2的token端点响应中,字段名就是refresh_token)
  • 保存refresh_token和初始的access_token,之后每次access token过期时,直接调用OAuth2的token端点,用refresh_token换取新的access_token,无需再次走登录和2FA流程

Python代码示例(Refresh Token续期)

import requests

def refresh_access_token(refresh_token, client_id, token_url):
    payload = {
        'grant_type': 'refresh_token',
        'refresh_token': refresh_token,
        'client_id': client_id  # 部分网站可能需要client_secret,按需添加
    }
    response = requests.post(token_url, data=payload)
    response.raise_for_status()
    token_data = response.json()
    # 部分网站会返回新的refresh_token,需替换旧值保存
    return token_data['access_token'], token_data.get('refresh_token', refresh_token)

# 使用示例
new_access_token, new_refresh_token = refresh_access_token(
    refresh_token="你的refresh_token",
    client_id="网站的client_id(如果需要)",
    token_url="https://目标网站/oauth2/token"
)
# 用新token发起API请求
headers = {'Authorization': f'Bearer {new_access_token}'}
api_response = requests.get("https://私有API地址", headers=headers)

修复Cookie持久化的问题(如果Refresh Token不可用)

你之前导出导入Cookie失败,大概率是因为Cookie包含HttpOnly或SameSite属性,普通导入方式无法保留这些属性,或者网站验证了请求上下文(比如User-Agent、IP绑定)。

  • 用Python的requests.Session()对象持久化会话:手动完成一次含2FA的登录后,把整个Session序列化保存(比如用pickle),后续直接加载Session即可复用登录状态
  • 注意:保持请求的User-Agent一致,避免网站触发安全验证

Python代码示例(Session持久化)

import requests
import pickle

# 第一次登录(手动完成2FA)
session = requests.Session()
# 模拟登录流程:提交账号密码、完成2FA验证(需根据网站实际请求调整)
session.post("https://目标网站/login", data={"username": "你的账号", "password": "你的密码"})
# 完成验证后保存Session到文件
with open('auth_session.pkl', 'wb') as f:
    pickle.dump(session, f)

# 后续定期请求时加载Session
with open('auth_session.pkl', 'rb') as f:
    session = pickle.load(f)
# 直接用Session发起API请求,自动带上有效凭证
api_response = session.get("https://私有API地址")

自动化2FA的备选方案(谨慎使用)

如果上述方法都不可行,且网站支持信任设备:

  • 完成2FA后,在登录请求中带上remember_device或类似参数(需抓包查看网站请求参数),标记当前设备为可信,后续登录无需再次验证2FA
  • 若必须自动化处理短信2FA,可使用第三方短信接收服务,但注意这可能违反网站服务条款,存在账号被封禁的风险

内容的提问来源于stack exchange,提问作者abel13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 14:52:28