Jak se aplikace připojuje k OpenPlatform: spuštění a ověření
Když uživatel otevře aplikaci, OpenPlatform jí neposílá heslo ani cookie. Pošle jí jednorázovou spouštěcí adresu a aplikace zavolá zpět OpenPlatform, aby zjistila, kdo je uživatel. Tato stránka sleduje kód (schemas/account.js, akce Account/run a controllers/verify.js).
1. Spuštění
Když uživatel klikne na aplikaci, portál zavolá API run/{appid}. OpenPlatform:
- zkontroluje, zda je aplikace v seznamu uživatele (jinak
App not found) a zda není zakázána; - vytvoří relaci aplikace (tabulka
tbl_app_session), která vyprší podle nastaveníapp_session_expire(výchozí jeden den); - sestaví ověřovací adresu:
urlplatformy +/verify/?token=+ identifikátor relace spojený s identifikátorem instalace přesX, následovanýXa kontrolním součtem (FUNC.checksum, který používá tajemstvísaltchecksum); - odvodí dva tokeny této relace ze sdílených tajemství aplikace:
reqtoken= MD5 ověřovací adresy se solíreqtokenaplikace, malými písmeny;restoken= MD5 tohotoreqtokense solírestokenaplikace;
url s jedním dalším parametrem dotazu: openplatform=<verification address>~<reqtoken>.U aplikace označené jako záložka žádná výměna není: adresa místo toho dostane ssid=<session checksum>.
2. Ověření
Aplikace vezme hodnotu openplatform, což je ověřovací adresa, ~ a reqtoken relace, a:
- vypočítá svůj vlastní
restoken: MD5 zreqtokense solírestoken, který sdílí s OpenPlatform; - zavolá
GETna celou hodnotuopenplatform(~areqtokenzůstanou v řetězci dotazu) s hlavičkoux-tokennastavenou na tentorestoken.
OpenPlatform poté (controllers/verify.js):
- rozdělí token dotazu u posledního
~(část za ním jereqtoken, který poslal) a odmítne volání, když chybí hlavička nebo token; - zkontroluje kontrolní součet identifikátoru relace, přečte relaci a porovná obě tajemství (
reqtokenarestokenz hlavičky); jakýkoli rozdíl jeInvalid token; - pokud má aplikace seznam povolených adres, zkontroluje adresu volajícího (
Not allowed IP address); - přečte uživatele a odmítne zakázaného (
User has been disabled) nebo neaktivního (User is inactive); - zajistí, aby měl uživatel odkazy na oznámení této aplikace (tabulka
tbl_user_app); - sestaví odpověď a propustí ji přes transformaci
verifyplatformy, takže nasazení může přidat pole.
Odpověď je objekt JSON. Prázdné hodnoty se z něj vypouštějí. Jeho hlavní pole jsou:
| Pole | Co to je |
|---|---|
id, name, email, photo, gender, reference | kdo je uživatel (photo je absolutní adresa) |
language, color, interface, darkmode, sounds | předvolby (jazyk a barva platformy, pokud je uživatel nemá) |
sa | uživatel je správce platformy |
permissions | řetězce value oprávnění uživatele v této aplikaci |
groups | id skupin uživatele |
appid, ssid | aplikace a kontrolní součet její relace |
openplatformid, openplatform | identifikátor a adresa instalace |
iframe | true, pokud aplikace není externí |
notify | adresa, kam posílat oznámení, když je uživatel přijímá (oznámení) |
platform | name a logo platformy, její groups a aplikace uživatele |
Odpověď se uchovává v mezipaměti v paměti s klíčem tokenu relace (část před ~) a mezipaměť se maže každé dvě minuty. Volání s tokenem, který je v této mezipaměti, se zodpoví z ní, ještě před opětovným porovnáním tajemství, takže opakované ověření v tomto čase je levné.
3. Opětovné zeptání později
GET /session/ přijímá ssid, který aplikace dostala (jako název parametru přijímá také openplatformid, token a session), zkontroluje jeho kontrolní součet a vrátí uživatele (id, language, name, color, sa, isonline), dokud relace uživatele nevypršela.
Na co pamatovat při tvorbě aplikace
- Nikdy neposílejte sdílená tajemství do prohlížeče: potřebuje je jen server aplikace.
- Ověřujte na serveru a z odpovědi si vytvořte vlastní relaci; parametr
openplatformje na jedno spuštění. - Používejte
permissionsz odpovědi, ne roli, kterou pošle prohlížeč. - Total.js 5 má nativního klienta pro tuto rodinu protokolů: viz OPENCLIENT.