Trading Widget Xác thực

Sử dụng partner-token cho các tích hợp SSO giao dịch nhúng mới.

View as Markdown

partner-token tránh đặt token ngắn trong URL và giữ apiSecret trên backend đối tác.

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})

Quy trình phía sau

1. Partner frontend receives auth_request from the iframe.
2. SDK calls tokenProvider.
3. Partner frontend calls its own backend.
4. Partner backend validates the partner session.
5. Partner backend calls 6MM Agent API or Java SDK createEmbedToken.
6. SDK sends embedToken to the iframe through postMessage.
7. iframe exchanges embedToken for a 6MM access token.
8. iframe continues initialization and emits ready.

hợp đồng tokenProvider

Lĩnh vựcHướng điMô tả
channelIdSDK -> Đối tác phía sauĐịnh danh phiên widget duy nhất. Backend nên chuyển cho createEmbedToken.
biểu tượngSDK -> Đối tác phía sauBiểu tượng giao dịch được yêu cầu hiện tại. Dùng nó để kiểm tra token khi cần.
lý doSDK -> Đối tác phía sauTại sao SDK lại yêu cầu token, chẳng hạn như tải ban đầu hoặc làm mới.
embedTokenBackend đối tác -> SDKToken tồn tại ngắn hạn được tạo bởi Agent SDK hoặc Agent API.
expireAtBackend đối tác -> SDKDấu thời gian hết hạn của token được trả về bởi 6MM.

Xử lý lỗi

Tình trạngKhuyến nghị sử dụng
Phiên đối tác đã hết hạnTrả về 401 từ điểm cuối đối tác và yêu cầu người dùng đăng nhập lại.
Việc tạo token tạm thời thất bạiHiển thị lỗi trong tokenProvider và cho phép widget xuất hiện lỗi xác thực.
channelId sự không khớpTừ chối yêu cầu và tạo lại phiên bản widget.
Người dùng không được phép giao dịchTrả về lỗi do đối tác kiểm soát và không tạo token nhúng.

Chế độ tương thích: agent-sso

agent-sso giữ lại luồng vé /agent-entry cũ hơn. Ưu tiên token đối tác cho các tích hợp mới.

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})