Trading Widget Uwierzytelnianie

Wykorzystaj partner-token do nowych integracji z wbudowanym handlem SSO tradingiem.

Zobacz jako Markdown

Partner-token unika umieszczania krótkich tokenów w URL-ach i utrzymuje apiSecret na backendzie partnera.

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

Przepływ backend

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 kontrakt

PoleKierunekOpis
channelIdSDK -> Backend partneraUnikalny identyfikator sesji widżetu. Backend powinien przekazać to createEmbedToken.
SymbolSDK -> Backend partneraAktualnie żądany symbol handlowy. Użyj go, by w razie potrzeby wyznaczyć skalę tokena.
PowódSDK -> Backend partneraDlaczego SDK żąda tokena, takiego jak początkowe ładowanie lub odświeżanie.
embedTokenBackend partnera -> SDKKrótkotrwały token stworzony przez Agent SDK lub Agenta API.
expireAtBackend partnera -> SDKZnacznik wygaśnięcia tokena zwrócony do 6MM.

Obsługa awarii

StanZalecane prowadzenie
Sesja partnerska wygasłaZwróć 401 z punktu końcowego partnera i poproś użytkownika o ponowne zalogowanie.
Tworzenie tokenów tymczasowo się nie powiodłoWrzuć błąd do tokenProvider i pozwól, by widżet wykrył błąd uwierzytelniania.
channelId niedopasowaniaOdrzuć żądanie i odtworzyć instancję widżetu.
Użytkownik nie ma prawa handlowaćZwróć błąd kontrolowany przez partnera i nie tworz tokena embed.

Tryb kompatybilności: agent-sso

Agent-SSO zachowuje starszy przepływ zgłoszeń /agent-entry. Preferuję token partnera przy nowych integracjach.

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