ForgeOpenPlatform
sk

OpenPlatform

Ako sa aplikácia pripája k OpenPlatform: spustenie a overenie

OpenPlatform · openplatform@5 openplatformprotocoltokensverifysso

Keď používateľ otvorí aplikáciu, OpenPlatform jej neposiela heslo ani cookie. Pošle jej jednorazovú spúšťaciu adresu a aplikácia zavolá späť OpenPlatform, aby zistila, kto je používateľ. Táto stránka sleduje kód (schemas/account.js, akcia Account/run a controllers/verify.js).

1. Spustenie

Keď používateľ klikne na aplikáciu, portál zavolá API run/{appid}. OpenPlatform:

  1. skontroluje, či je aplikácia v zozname používateľa (inak App not found) a či nie je zakázaná;
  2. vytvorí reláciu aplikácie (tabuľka tbl_app_session), ktorá vyprší podľa nastavenia app_session_expire (predvolene jeden deň);
  3. zostaví overovaciu adresu: url platformy + /verify/?token= + identifikátor relácie spojený s identifikátorom inštalácie cez X, nasledovaný X a kontrolným súčtom (FUNC.checksum, ktorý používa tajomstvo saltchecksum);
  4. odvodí dva tokeny tejto relácie zo zdieľaných tajomstiev aplikácie:
    • reqtoken = MD5 overovacej adresy so soľou reqtoken aplikácie, malými písmenami;
    • restoken = MD5 tohto reqtoken so soľou restoken aplikácie;
  • otvorí aplikáciu na jej url s jedným ďalším parametrom dotazu: openplatform=<verification address>~<reqtoken>.
  • Pri aplikácii označenej ako záložka nie je žiadna výmena: adresa namiesto toho dostane ssid=<session checksum>.

    2. Overenie

    Aplikácia vezme hodnotu openplatform, čo je overovacia adresa, ~ a reqtoken relácie, a:

    1. vypočíta svoj vlastný restoken: MD5 z reqtoken so soľou restoken, ktorý zdieľa s OpenPlatform;
    2. zavolá GET na celú hodnotu openplatform (~ a reqtoken zostanú v reťazci dotazu) s hlavičkou x-token nastavenou na tento restoken.

    OpenPlatform potom (controllers/verify.js):

    1. rozdelí token dotazu pri poslednom ~ (časť za ním je reqtoken, ktorý poslal) a odmietne volanie, keď chýba hlavička alebo token;
    2. skontroluje kontrolný súčet identifikátora relácie, prečíta reláciu a porovná obe tajomstvá (reqtoken a restoken z hlavičky); akýkoľvek rozdiel je Invalid token;
    3. ak má aplikácia zoznam povolených adries, skontroluje adresu volajúceho (Not allowed IP address);
    4. prečíta používateľa a odmietne zakázaného (User has been disabled) alebo neaktívneho (User is inactive);
    5. zabezpečí, aby mal používateľ odkazy na oznámenia tejto aplikácie (tabuľka tbl_user_app);
    6. zostaví odpoveď a prepustí ju cez transformáciu verify platformy, takže nasadenie môže pridať polia.

    Odpoveď je objekt JSON. Prázdne hodnoty sa z neho vypúšťajú. Jeho hlavné polia sú:

    PoleČo to je
    id, name, email, photo, gender, referencekto je používateľ (photo je absolútna adresa)
    language, color, interface, darkmode, soundspreferencie (jazyk a farba platformy, ak ich používateľ nemá)
    sapoužívateľ je správca platformy
    permissionsreťazce value oprávnení používateľa v tejto aplikácii
    groupsid skupín používateľa
    appid, ssidaplikácia a kontrolný súčet jej relácie
    openplatformid, openplatformidentifikátor a adresa inštalácie
    iframetrue, pokiaľ aplikácia nie je externá
    notifyadresa, kam posielať oznámenia, keď ich používateľ prijíma (oznámenia)
    platformname a logo platformy, jej groups a aplikácie používateľa

    Odpoveď sa uchováva vo vyrovnávacej pamäti v pamäti s kľúčom tokenu relácie (časť pred ~) a pamäť sa vymaže každé dve minúty. Volanie s tokenom, ktorý je v tejto pamäti, sa zodpovie z nej, ešte pred opätovným porovnaním tajomstiev, takže opakované overenie v tomto čase je lacné.

    3. Opätovné opýtanie neskôr

    GET /session/ prijíma ssid, ktorý aplikácia dostala (ako názov parametra prijíma aj openplatformid, token a session), skontroluje jeho kontrolný súčet a vráti používateľa (id, language, name, color, sa, isonline), kým relácia používateľa nevypršala.

    Na čo pamätať pri tvorbe aplikácie

    • Nikdy neposielajte zdieľané tajomstvá do prehliadača: potrebuje ich iba server aplikácie.
    • Overujte na serveri a z odpovede si vytvorte vlastnú reláciu; parameter openplatform je na jedno spustenie.
    • Používajte permissions z odpovede, nie rolu, ktorú pošle prehliadač.
    • Total.js 5 má natívneho klienta pre túto rodinu protokolov: pozri OPENCLIENT.