使用 OAuth 1.0a 认证请求
OAuth 1.0a 的请求重点是签名。服务器需要把 HTTP 方法、URL、查询参数、OAuth 参数和密钥组合起来,生成 oauth_signature。
Authorization Header
Section titled “Authorization Header”示例结构:
Authorization: OAuth oauth_consumer_key="YOUR_CONSUMER_KEY", oauth_token="USER_ACCESS_TOKEN", oauth_signature_method="RSA-SHA256", oauth_timestamp="Unix 时间戳", oauth_nonce="随机字符串", oauth_signature="签名结果"实际请求要放在一行里。示例换行只是为了阅读。
签名输入通常包含
Section titled “签名输入通常包含”| 内容 | 说明 |
|---|---|
| HTTP 方法 | GET、POST 等。 |
| 请求 URL | 不含多余参数顺序差异。 |
| OAuth 参数 | consumer key、token、timestamp、nonce 等。 |
| 查询参数 | URL 上的业务参数。 |
| 请求体参数 | 视接口和签名规则而定。 |
| 密钥 | consumer secret、token secret 或私钥。 |
Python 签名骨架
Section titled “Python 签名骨架”headers = { "Authorization": build_oauth_header( method="GET", url="https://api.ibkr.com/v1/api/iserver/accounts", consumer_key="YOUR_CONSUMER_KEY", access_token="USER_ACCESS_TOKEN", token_secret="USER_TOKEN_SECRET", )}这里的 build_oauth_header() 需要严格按 OAuth 1.0a 和 IBKR 要求实现。上面的代码只展示调用位置,不是完整签名库。
| 现象 | 可能原因 |
|---|---|
401 | token 失效、签名错误或权限不足。 |
| 签名无效 | URL 编码、参数排序或时间戳错误。 |
| 开发环境能用、服务器不能用 | 服务器时间不同步、回调配置不同或密钥文件路径不同。 |
| WebSocket 认证失败 | 没有正确传 session token cookie。 |