选择身份认证流程
钱包签名注册使用您现有、具备
register_user 权限的 Builder API 密钥。用户签署 QFEX 生成的消息后,QFEX 创建或恢复其钱包账户,然后返回交易密钥。此流程不需要 OAuth 客户端。
两种流程都需要在每条交易 WebSocket 连接上附加 Builder Code,才能归因奖励。
OAuth 集成
OAuth 集成包含两个独立部分:- **OAuth 识别并授权 QFEX 用户。**每位终端用户登录 QFEX 并授权您的应用。新用户在 QFEX 上开户,不会向您的应用交出 QFEX 凭据。
- **Builder Code 标识您的集成。**应用为这些用户打开已认证交易 WebSocket 会话时,附加同一个 Builder Code。
Builder Code 不会永久绑定到终端用户账户,而是附加到交易 WebSocket 连接。在该连接存续期间,所有符合条件的订单都归因给该代码。
集成模型
典型聚合器拥有:- 一个由聚合器拥有的 QFEX 账户;
- 该账户拥有的一个有效 Builder Code;
- 一个为聚合器应用登记的 QFEX OAuth 客户端;
- 每位连接账户的 QFEX 用户各自的一份 OAuth 授权及令牌组。
11111111-1111-4111-8111-111111111111,则为 Alice、Bob 及其他通过聚合器交易的用户认证 QFEX 交易 WebSocket 时,均使用该代码。每位用户仍使用自己独立的 QFEX OAuth 访问令牌认证。
开始之前
1. 创建 Builder Code
登录 QFEX,在 **Developer Settings → Builder code(开发者设置 → Builder Code)**中创建,也可调用POST /user/builder-code。
将返回的 UUID 保存为应用配置,例如:
2. 登记 OAuth 客户端
联系 support@qfex.com登记您的集成为 QFEX OAuth 客户端,并提供:- 应用名称;
- 生产环境重定向 URI;
- 徽标 URL(如有);
- 客户端是公开型(public)还是机密型(confidential)。
终端用户流程
第 1 步:用户选择连接 QFEX
用户在您的应用中选择 **Connect QFEX(连接 QFEX)**时:- 生成高熵的
state值。 - 生成 PKCE
code_verifier。 - 根据验证字符串计算 SHA-256
code_challenge。 - 在用户服务端会话或其他安全短期存储中保存
state与code_verifier。 - 将用户重定向到 QFEX 授权接口。
state 或 PKCE。
第 2 步:QFEX 处理登录或开户
用户被送往 QFEX,而不是您应用内的凭据表单。- 已有 QFEX 账户的用户登录并完成所需 MFA。
- 没有账户的用户在 QFEX 开户,并完成必要准入步骤。
- 用户查看 OAuth 授权请求,并选择批准或拒绝您的应用。
第 3 步:处理 OAuth 回调
用户批准后,QFEX 将其重定向至已登记的redirect_uri,并携带授权 code 及原始 state。
- 若
state与用户会话中保存的值不完全一致,拒绝请求。 - 读取已保存的 PKCE
code_verifier。 - 用授权码交换令牌。
- 从会话删除一次性的
state和code_verifier。
第 4 步:用授权码交换 QFEX 令牌
对于机密型服务端客户端,使用 HTTP Basic 认证客户端,并发送 PKCE 验证字符串:client_id,但仍须使用 PKCE。
第 5 步:打开交易 WebSocket 并附加 Builder Code
将用户的 OAuthaccess_token 用作 JWT。WebSocket 升级请求和 QFEX 认证消息均使用用户令牌,Builder Code 添加在认证消息中。
第 6 步:正常交易
认证响应成功后,通过普通交易 WebSocket API 下单。第 7 步:刷新令牌并重连
OAuth 访问令牌会过期。请在过期前或认证失败后,使用刷新令牌获取新访问令牌。 机密型客户端示例:新用户与现有用户使用同一入口
集成应提供一个 **Connect QFEX(连接 QFEX)**操作,不要在您这一侧构建独立的“注册”和“登录”API。Builder 归因以连接为范围
Builder 归因刻意独立于开户及 OAuth。这意味着:- 终端用户账户不会永久绑定某个开发者;
- 同一用户可以在不同时候通过不同开发者交易;
- 用户直接在 QFEX 交易时,不会自动归因给您;
- 您的集成打开的每条交易 WebSocket 都必须包含
builder_code; - 不附加代码重连时,新连接不再具有 Builder 归因。
builder_code,而不是接受浏览器或终端用户提供的任意值。
安全检查清单
上线前:- 所有 OAuth 流程均使用授权码加 PKCE;
- 每次回调均校验
state; - 登记精确的 HTTPS 重定向 URI,不使用通配符回调;
- 将机密型客户端密钥、访问令牌和刷新令牌留在服务端;
- 加密保存刷新令牌;
- 不记录访问令牌、刷新令牌、授权码或 QFEX API 私密密钥;
- 不在您的应用内索取用户 QFEX 密码或 MFA 验证码;
- 刷新后使用新访问令牌重连交易 WebSocket;
- 每条新交易 WebSocket 均附加配置的 Builder Code;
- 授权撤销后立即停止交易。
标准 OAuth scope 描述认证服务返回的身份信息,不应视为 QFEX 交易中“只读”或“仅交易”的权限边界。用于 QFEX 交易 API 的访问令牌,必须作为能够代表用户操作的凭据保护。
端到端检查清单
能够测试以下全部项目,才算完成生产集成:- 无 QFEX 账户的用户可从连接 QFEX 进入开户流程;新用户 OAuth 连续跳转功能发布后,能够在准入完成后返回原授权请求。
- 现有用户无需向您的应用分享凭据即可连接。
- 回调拒绝无效
state或 PKCE 验证字符串。 - 可以交换授权码,并安全保存返回的令牌组。
- 可以用用户访问令牌认证
wss://trade.qfex.com。 - 交易 WebSocket 认证消息自动包含您的 Builder UUID。
- 通过该连接提交的普通订单、触发单及 TWAP 均归因给您。
- 刷新令牌并重连 WebSocket 后,归因保持正确。
- 撤销已连接应用后,无法继续使用被撤销的授权。