Trading Widget Аутентификация

Используйте partner-token для новых встроенных торговых SSO интеграций.

Просмотр в формате Markdown

Partner-token избегает размещения коротких токена в URL и держит 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. 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.

tokenProvider контракт

ПолеРежиссураОписание
channelIdSDK -> Партнёрский бэкэндУникальный идентификатор сессии виджета. Бэкенд должен передавать его createEmbedToken.
СимволSDK -> Партнёрский бэкэндТекущий запрошенный торговый символ. Используйте его для определения области токена при необходимости.
ПричинаSDK -> Партнёрский бэкэндПочему SDK запрашивает токен, например, начальную загрузку или обновление.
embedTokenПартнёрский бэкенд -> SDKКратковременный токен, созданный Agent SDK или агентом API.
expireAtПартнёрский бэкенд -> SDKВременная метка истечения токена возвращается 6MM.

Обработка отказов

СостояниеРекомендуемое обращение
Партнерская сессия закончиласьВерните 401 с партнёрской конечной точки и попросите пользователя войти снова.
Создание токенов временно не получилосьВведите ошибку в tokenProvider и позвольте виджету выявить ошибку аутентификации.
channelId несоответствиеОтклоните запрос и создайте экземпляр виджета заново.
Пользователю запрещено торговатьВозвращайте ошибку, управляемую партнёром, и не создавайте встраиваемый токен.

Режим совместимости: agent-sso

Agent-sso сохраняет старый поток /agent-entry тикетов. Предпочитайте партнёрский токен для новых интеграций.

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