使用 OAuth2 和 Trading API
机器翻译译自英文(docs.alpaca.markets)本页 37 段已全部译完
默认情况下,一旦你拥有有效的 client_id 和 client_secret,与 OAuth Client 关联的任何模拟账户和实盘账户都将可供连接到你的应用。我们欢迎开发者构建由 Alpaca 驱动的应用和产品,同时保护我们用户的隐私和安全。要使用 Alpaca 的 API 进行构建,请遵循以下指南。
ℹ️ 注意
单个 Alpaca OAuth 令牌可授权访问以下之一:
- 一个实盘账户
- 一个模拟账户
- 一个实盘账户和一个模拟账户
对于拥有多个模拟账户的用户,必须分别为他们要连接的每个账户执行授权流程。
获取访问令牌
从高层来看,流程如下所示,我们将详细说明每个步骤
- 用户请求你的应用与 Alpaca 之间建立连接
- 用户被重定向到 Alpaca 登录,并在仪表板内授权应用
- Alpaca 通过用户代理向你的应用授予授权令牌
- 你的应用然后发出访问令牌请求
- Alpaca 返回访问令牌授予
1. 代表用户请求连接
将用户重定向到 Alpaca 以授权访问你的应用时,你需要使用正确的参数和权限范围构造授权 URL。
GET https://app.alpaca.markets/oauth/authorize?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URL&state=SOMETHING_RANDOM&scope=account:write%20trading&env=live
以下是你应始终指定的参数列表:
| 参数 | 必需? | 描述 |
|---|---|---|
response_type | 必需 | 必须为 code 才能请求授权码。 |
client_id | 必需 | 你在注册应用时获得的 client_id |
redirect_uri | 必需 | 授权后用户将被发送到的重定向 URL。必须与你的应用的白名单重定向 URI 之一匹配。 |
state | 可选 | 一个不可猜测的随机字符串,用于防止请求伪造攻击。 |
scope | 可选 | 你的应用请求访问的权限范围列表,以空格分隔。默认假定为只读端点访问权限。 |
env | 可选 | 如果提供,必须为 live 或 paper 之一。如果未指定,将提示用户授权实盘和模拟账户。 |
允许的权限范围
| 范围 | 描述 |
|---|---|
account:write | 账户配置和自选列表的写入权限。 |
trading | 下达、取消或修改订单。 |
data | 访问 Data API。 |
2. 用户授权应用访问 Alpaca 账户
在你将用户重定向到 Alpaca 后,我们将显示以下 OAuth 同意屏幕,并要求用户授权你的应用连接到他们的 Alpaca 账户。

如果你在重定向到我们时指定了 env 参数的值,我们将要求用户仅授权实盘或模拟账户,具体取决于你分别指定的是 live 还是 paper。
例如,如果指定 env=paper 作为查询参数,我们将显示以下同意屏幕。

3. Alpaca 重定向回应用
如果用户批准访问,Alpaca 将把他们重定向回你的 redirect_uri,并附带一个临时的 code 参数。如果你在步骤 1 中指定了 state 参数,它也将被返回。该参数将始终与步骤 1 中指定的值匹配。如果值不匹配,则不应信任该请求。
示例
GET https://example.com/oauth/callback?code=67f74f5a-a2cc-4ebd-88b4-22453fe07994&state=8e02c9c6a3484fadaaf841fb1df290e1
4. 应用接收授权码
然后,你可以使用此代码交换访问令牌。
5. 应用用授权码交换访问令牌
收到临时 code 后,你可以将其交换为访问令牌。这可以通过向 https://api.alpaca.markets/oauth/token 发出 POST 调用来完成
参数(全部必需)
| 参数 | 描述 |
|---|---|
grant_type | 对于访问令牌请求,必须设置为 authorization_code。 |
code | 在步骤 4 中收到的授权码 |
client_id | 你在注册应用时收到的 Client ID。 |
client_secret | 你在注册应用时收到的 Client Secret。 |
redirect_uri | 你用于授权码请求的重定向 URI。 |
🚧 注意
此请求应在你的后端服务器后台进行,出于安全目的不应向最终用户可见。
内容类型必须为 RFC 中定义的 application/x-www-form-urlencoded。
示例请求:
curl -X POST https://api.alpaca.markets/oauth/token \
-d 'grant_type=authorization_code&code=67f74f5a-a2cc-4ebd-88b4-22453fe07994&client_id=fc9c55efa3924f369d6c1148e668bbe8&client_secret=5b8027074d8ab434882c0806833e76508861c366&redirect_uri=https://example.com/oauth/callback'请求成功后,响应中将返回有效的访问令牌:
{
"access_token": "79500537-5796-4230-9661-7f7108877c60",
"token_type": "bearer",
"scope": "account:write trading"
}API 调用
一旦你完成集成并拥有有效的访问令牌,你就可以代表最终用户开始调用 Alpaca Trading API v2。
示例请求
A
curl https://api.alpaca.markets/v2/account /
-H 'Authorization: Bearer 79500537-5796-4230-9661-7f7108877c60'curl https://paper-api.alpaca.markets/v2/orders /
-H 'Authorization: Bearer 79500537-5796-4230-9661-7f7108877c60'
OAuth 令牌也可用于交易更新 websocket 流。
{
"action": "authenticate",
"data": {
"oauth_token": "79500537-5796-4230-9661-7f7108877c60"
}
}
OAuth 令牌可用于市场数据流的身份验证。请注意,大多数用户只能有 1 个活动流连接。如果该连接被另一个第三方应用使用,你将收到错误:406 和“connection limit exceeded”消息。
{
"action": "auth",
"key": "oauth",
"secret": "79500537-5796-4230-9661-7f7108877c60"
}