Ako sa aplikácia pripája k OpenPlatform: spustenie a overenie
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:
- skontroluje, či je aplikácia v zozname používateľa (inak
App not found) a či nie je zakázaná; - vytvorí reláciu aplikácie (tabuľka
tbl_app_session), ktorá vyprší podľa nastaveniaapp_session_expire(predvolene jeden deň); - zostaví overovaciu adresu:
urlplatformy +/verify/?token=+ identifikátor relácie spojený s identifikátorom inštalácie cezX, nasledovanýXa kontrolným súčtom (FUNC.checksum, ktorý používa tajomstvosaltchecksum); - odvodí dva tokeny tejto relácie zo zdieľaných tajomstiev aplikácie:
reqtoken= MD5 overovacej adresy so soľoureqtokenaplikácie, malými písmenami;restoken= MD5 tohtoreqtokenso soľourestokenaplikácie;
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:
- vypočíta svoj vlastný
restoken: MD5 zreqtokenso soľourestoken, ktorý zdieľa s OpenPlatform; - zavolá
GETna celú hodnotuopenplatform(~areqtokenzostanú v reťazci dotazu) s hlavičkoux-tokennastavenou na tentorestoken.
OpenPlatform potom (controllers/verify.js):
- rozdelí token dotazu pri poslednom
~(časť za ním jereqtoken, ktorý poslal) a odmietne volanie, keď chýba hlavička alebo token; - skontroluje kontrolný súčet identifikátora relácie, prečíta reláciu a porovná obe tajomstvá (
reqtokenarestokenz hlavičky); akýkoľvek rozdiel jeInvalid token; - ak má aplikácia zoznam povolených adries, skontroluje adresu volajúceho (
Not allowed IP address); - prečíta používateľa a odmietne zakázaného (
User has been disabled) alebo neaktívneho (User is inactive); - zabezpečí, aby mal používateľ odkazy na oznámenia tejto aplikácie (tabuľka
tbl_user_app); - zostaví odpoveď a prepustí ju cez transformáciu
verifyplatformy, 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, reference | kto je používateľ (photo je absolútna adresa) |
language, color, interface, darkmode, sounds | preferencie (jazyk a farba platformy, ak ich používateľ nemá) |
sa | používateľ je správca platformy |
permissions | reťazce value oprávnení používateľa v tejto aplikácii |
groups | id skupín používateľa |
appid, ssid | aplikácia a kontrolný súčet jej relácie |
openplatformid, openplatform | identifikátor a adresa inštalácie |
iframe | true, pokiaľ aplikácia nie je externá |
notify | adresa, kam posielať oznámenia, keď ich používateľ prijíma (oznámenia) |
platform | name 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
openplatformje na jedno spustenie. - Používajte
permissionsz odpovede, nie rolu, ktorú pošle prehliadač. - Total.js 5 má natívneho klienta pre túto rodinu protokolov: pozri OPENCLIENT.