跳转到内容

总览

Interactive Brokers 要求账户启用 Two Factor Authentication(2FA,双因素认证)。TWS API 不能绕过登录认证,也不能替代账户管理功能;你的程序只能在 TWS 或 IB Gateway 已经完成登录并允许 API 连接后,才能通过 Socket API 工作。

官方入口:TWS API Documentation

TWS API 的连接链路是:

Python / Java / C++ 程序 -> TWS 或 IB Gateway -> IBKR 后端

程序连接的是开发机或服务器上的 TWS / IB Gateway,不是直接登录 IBKR 云端。所以 2FA 发生在 TWS / IB Gateway 登录阶段,而不是每个 API 请求里。

这意味着:

  • 你的程序不能用 TWS API 自动输入 2FA。
  • 不能用 TWS API 修改账户安全设置。
  • 服务器部署时,仍然要设计人工登录和重新认证流程。
  • 如果账户启用了 API 不支持的 2FA 方式,TWS / IB Gateway 登录或 API 场景可能无法顺利使用。

官方面向第三方连接的说明把 2FA 分成两类:

类型方法
支持IB KeyHandy KeySMS / Text MessagesDigital Security Card+ (DSC+)
不支持Security Code CardTemporary Security Code CardOnline Code Card

实际开发时,推荐优先使用 IB Key,也就是通过 IBKR Mobile 完成认证。它通常比短信更稳定,也更适合长期维护。IBKR 的安全登录说明也列出了 IBKR Mobile / IB Key、移动认证器和 Digital Security Card+ 等双因素方式;具体账户可用方式以 Client Portal 安全设置页面为准。

2FA 不会改变 EClientEWrapperreqHistoricalData() 这些 API 方法的参数。它影响的是 API 程序能不能连接到一个已经认证完成的 TWS / IB Gateway。

阶段2FA 是否参与说明
启动 TWS / IB Gateway 并登录会参与需要用户完成账号密码和第二因素认证。
Python 调用 connect()通常不直接参与前提是 TWS / IB Gateway 已经登录且允许 API 连接。
请求行情、账户、订单不会每次都弹 2FA但会受登录会话、权限和重新认证状态影响。
会话过期或需要重新认证会影响API 可能断线、无法继续收数据或无法继续下单。

因此,程序里要把“Socket 断开”和“账户需要重新认证”当作两类不同问题处理。前者可能自动重连,后者通常需要用户处理登录界面。

很多人误以为把 IB Gateway 放到 Linux 服务器上之后,就能无人值守永久运行。实际不是这样。

你仍然需要考虑:

  • 初次启动时如何完成登录。
  • 每日或每周重新认证时谁来处理。
  • TWS / IB Gateway 断线后如何恢复。
  • 是否需要 VNC 或远程桌面来人工确认登录状态。
  • 程序如何识别“API 断了”和“账户需要重新认证”的区别。

服务器部署建议:

问题建议
初次登录保留人工登录通道,例如远程桌面或 VNC。
每日重启 / 每周重新认证在监控里明确提示“需要人工认证”,不要无限重试 API 请求。
多应用登录避免同一账户同时在多个地方抢会话,尤其是 TWS、Gateway、Client Portal Gateway 同时使用时。
程序恢复先检查 TWS / Gateway 登录状态,再检查 Socket 连接,再恢复行情和订单订阅。
安全边界不把 API 端口暴露到公网,不把账户密码和 2FA 信息写进代码。

涉及登录、2FA 和重新认证的问题,可以按这条顺序排查:

先确认 TWS / IB Gateway 登录状态
-> 再确认 API Socket 是否允许连接
-> 再确认 Python 程序是否收到 nextValidId
-> 最后排查具体行情、账户或订单请求

这样排查更稳。否则新手很容易把“账户需要重新认证”误判成“Python 示例代码有问题”。