Open API token životný cyklus
cTrader Open API umožňuje jeden platný prístupový token na cTrader ID (cID) v čase. V momente nový token je vydaný — plánovaná obnova alebo re-autorizácia keď používateľ viazaný iný účet na rovnaký cID — predchádzajúci token je neplatný. A copy engine spúšťajúce na vzdialený uzol drží toho teraz-mŕtvého token, takže nový token musí dosiahnuť to bez vypadnutia live pripojenie.
Model
OpenApiAuthorizationje agregát, ktorý drží cID šifrovaný prístup + refresh tokeny. Jedinečný index na(UserId, CtidUserId)vynúti presne jeden autorizácia na cID na užívateľa.TokenVersion— monotónny počítadlo udlúšeného pokaždé token sa rotuje (Refresh(), ktorý tiež pokrýva re-auth cestu keď iný účet je viazaný na rovnaký cID). To je verzii značka na pravidlo single-valid-token a je čo bežiacu hostitela používa na detekciu a zmeny, dokonca aj keď dva token reťazce náhodou zrážajú.- Tokeny sú šifrované v pokoji cez
ISecretProtector(EncryptionPurposes.OpenApiAccessToken/OpenApiRefreshToken). Oni sú nikdy protokolovaní alebo uložené v plaintext.
Propagácia (milostivý in-place swap)
- Token sa rotuje → nový token + bumped
TokenVersionsú trvalé. CopyEngineSupervisorna hostovej uzle čítajú plán každý rekoncilácia cyklus a počítajú token podpis (prístupové tokeny + verzií). Zmena znamená rotáciu.- Namiesto rozdelenia dole hostitele a restartovanie (čo by zhodilo master vykonávanie stream), supervisor tlači nový token k bežiacemu hostiteľu.
- Host re-authenticates postihnutý účet na existujúcej zásuvke
(
ProtoOAAccountAuthReqznova) cezSwapAccessTokenAsync, potom robí ľahký rekoncilácia. A starý token zomrie; kopírovanie stream nikdy sa nezastaví.
Toto je čo robí cross-cID prípad bezpečný: a používateľ pridávajúce druhý účet z rovnakého cID mid-run neplatný starý token a bežiacu copy profil udržiava sa na novom.
Refresh
OpenApiTokenRefreshService (background) proaktívne obnovuje autorizácie pred vypršaním;
OpenApiAuthorization.IsExpiring(threshold, now) brány to. cTrader rotuje refresh token
na každý refresh, takže nový refresh token je trvalé okamžite; a read-only cache, ktorý nemôže
trvalé by sebou-zneplatniť (relevantný na in-cluster test Job, ktorý montáž a zapisovateľný kópie
z tajomstva).
Zlyhanie eskalácii
A zlyhavý refresh nie je ticho. OpenApiAuthorization.MarkRefreshFailed(reason, now, criticalWindow)
záznam RefreshFailedAt, inkrementá ConsecutiveRefreshFailures a vždy zvyšuje
AccessTokenRefreshFailed (upozornenie). Keď token je teraz vnútri App:OpenApi:TokenRefreshCriticalWindow
(štandardne 6h) z vypršania a refresh je stále zlyhajúc, to eskaluje raz s a
AccessTokenRefreshCritical doménová udalosť + Critical log, takže vlastník môžu re-authorize pred
kopírovanie/prop-firm operácie stratu token. Počítadlo zlyhania a eskalácii zámka reset na ďalšie
úspešný Refresh. Služba naďalej opakujú každý TokenRefreshInterval, takže a poskytovať/údržba
výpadok samoreparácia keď obnov koncový bod vracia.
Nevalidácia alert & auto-recovery (M1)
A čiastočný/znova-autorizácia na cID neplatný token a bežiacu copy hostitela stále drží. Keď a
obchodné volať odmietne s OpenApiErrorKind.TokenInvalid, host zvyšuje sa odlišný
CopyTokenInvalidated upozornenie (log 1078) — nie generický zlyhanie — takže notifikácia kanálu vie a
token potreby pozornosti. Recovery je automatický: supervisor znova-čítajú autorizácia každý cyklus a,
keď osviežené token zmení token podpis, to tlačí do bežiacim hostitele na in-place
swap — kopírovanie resumes bez ručného re-pridať. A NotLinkable profil (token/auth dočasne
neriešiteľný) je podobne re-vyhodnotené každý supervisor cyklus a hostované momente Its plán stavy znova.
Host liveness watchdog (M2)
Supervisor sleduje každý hostovaný profil beží úlohu. Ak a hostitele výstupy alebo zlyhá kým Its profil je
stále pridelené tomuto uzol, watchdog zruší a restartuje ho ďalšie cyklus (log
CopyHostRestarted), takže a wedged hostiteľu samoreparácia namiesto potreby ručného reštartu — a jeden profil
zlyhanie nikdy stanov iný (per-profile izolácia).
Testy
- Jednotka —
TokenVersionbumps naRefresh; hostitelu vykonáva in-place swap bez reštartu; cross-cID nevalidácia swaps zdroj a destinácia tokeny; a nevalidovaný destinácia token zvyšujeCopyTokenInvalidateda auto-obnovuje na ďalšie token push (M1); watchdogIsHostDeadrozhodnutie restartuje hotový/zlyhavý hostitela a nechá preradenú profil sám (M2). - Integrácia —
TokenVersiontrvalé + inkrementá cez EF na reálny Postgres; token podpis zmeny na verzii bump dokonca aj keď reťazec je nezmenená.