Skip to main content

使用 OAuth2 和 Trading API

机器翻译译自英文(docs.alpaca.markets)本页 37 段已全部译完

默认情况下,一旦你拥有有效的 client_id 和 client_secret,与 OAuth Client 关联的任何模拟账户和实盘账户都将可供连接到你的应用。我们欢迎开发者构建由 Alpaca 驱动的应用和产品,同时保护我们用户的隐私和安全。要使用 Alpaca 的 API 进行构建,请遵循以下指南。

ℹ️ 注意

单个 Alpaca OAuth 令牌可授权访问以下之一:

  • 一个实盘账户
  • 一个模拟账户
  • 一个实盘账户和一个模拟账户

对于拥有多个模拟账户的用户,必须分别为他们要连接的每个账户执行授权流程。

获取访问令牌

从高层来看,流程如下所示,我们将详细说明每个步骤

  1. 用户请求你的应用与 Alpaca 之间建立连接
  2. 用户被重定向到 Alpaca 登录,并在仪表板内授权应用
  3. Alpaca 通过用户代理向你的应用授予授权令牌
  4. 你的应用然后发出访问令牌请求
  5. 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"
}