鉴权

新接入建议使用 partner-token 模式。

以 Markdown 格式查看

partner-token 不会把短 token 放到 URL,也不会让 Partner 前端持有 apiSecret。

1const widget = TradingWidget.create('#trading-widget', {
2 baseUrl: 'https://app.6mm.com',
3 auth: {
4 mode: 'partner-token',
5 tokenProvider: async ({ channelId, symbol, reason }) => {
6 const resp = await fetch('/api/trading/embed-token', {
7 method: 'POST',
8 credentials: 'include',
9 headers: { 'Content-Type': 'application/json' },
10 body: JSON.stringify({ channelId, symbol, reason }),
11 })
12
13 if (!resp.ok) {
14 throw new Error('Failed to request embed token')
15 }
16
17 return resp.json()
18 },
19 },
20})

后端流程

1. iframe 向父页面发送 auth_request
2. SDK 调用 tokenProvider
3. Partner 前端请求 Partner 后端
4. Partner 后端校验自己的用户登录态
5. Partner 后端调用 6MM Agent API 或 Java SDK createEmbedToken
6. SDK 通过 postMessage 把 embedToken 发给 iframe
7. iframe 用 embedToken 换取 6MM access token
8. iframe 继续初始化并触发 ready

tokenProvider 约定

字段方向说明
channelIdSDK -> Partner 后端唯一 Widget 会话标识。后端创建 embedToken 时应传入该值。
symbolSDK -> Partner 后端当前请求的交易对,可用于限制 token 范围。
reasonSDK -> Partner 后端SDK 请求 token 的原因,例如初始化或刷新。
embedTokenPartner 后端 -> SDK由 Agent SDK 或 Agent API 创建的短期 token。
expireAtPartner 后端 -> SDK6MM 返回的 token 过期时间。

失败处理

情况建议处理
Partner 登录态过期Partner 接口返回 401,并要求用户重新登录。
Token 创建临时失败tokenProvider 抛出错误,让 Widget 展示鉴权错误。
channelId 不匹配拒绝请求并重新创建 Widget 实例。
用户不允许交易返回 Partner 可控错误,不创建 embedToken。

兼容模式:agent-sso

agent-sso 保留旧的 /agent-entry ticket 流程。新接入建议优先使用 partner-token。

1const widget = TradingWidget.create('#trading-widget', {
2 baseUrl: 'https://app.6mm.com',
3 auth: {
4 mode: 'agent-sso',
5 entryUrlProvider: async ({ redirectPath }) => {
6 const resp = await fetch('/api/trading-entry', {
7 method: 'POST',
8 credentials: 'include',
9 headers: { 'Content-Type': 'application/json' },
10 body: JSON.stringify({ redirectPath }),
11 })
12 const data = await resp.json()
13 return data.webUrl
14 },
15 },
16})