Hogyan csatlakozik egy alkalmazás az OpenPlatformhoz: az indítás és az ellenőrzés
Amikor egy felhasználó megnyit egy alkalmazást, az OpenPlatform nem küld neki jelszót vagy cookie-t. Egy egyszer használatos indítási címet küld, és az alkalmazás visszahív az OpenPlatformhoz, hogy megtudja, ki a felhasználó. Ez az oldal a kódot követi (schemas/account.js, Account/run művelet és controllers/verify.js).
1. Az indítás
Amikor a felhasználó rákattint egy alkalmazásra, a portál meghívja a run/{appid} API-t. Az OpenPlatform:
- ellenőrzi, hogy az alkalmazás a felhasználó listáján van-e (különben
App not found), és hogy nincs-e letiltva; - létrehoz egy alkalmazásmunkamenetet (
tbl_app_sessiontábla), amely azapp_session_expirebeállítás szerint jár le (alapértelmezés szerint egy nap); - felépíti az ellenőrzési címet: a platform
urlcíme +/verify/?token=+ a munkamenet azonosítójaX-szel összefűzve a telepítés azonosítójával, majdXés egy ellenőrző összeg (FUNC.checksum, amely asaltchecksumtitkot használja); - levezeti a munkamenet két tokenjét az alkalmazás megosztott titkaiból:
reqtoken= az ellenőrzési cím MD5 értéke az alkalmazásreqtokenértékével sózva, kisbetűvel;restoken= az adottreqtokenMD5 értéke az alkalmazásrestokenértékével sózva;
url címén egy extra lekérdezési paraméterrel: openplatform=<verification address>~<reqtoken>.A könyvjelzőként megjelölt alkalmazásnál nincs kézfogás: a cím helyette ssid=<session checksum> értéket kap.
2. Az ellenőrzés
Az alkalmazás veszi az openplatform értékét, amely az ellenőrzési cím, egy ~ és a munkamenet reqtoken értéke, és:
- kiszámítja a saját
restokenértékét: areqtokenMD5 értékét az OpenPlatformmal megosztottrestokenértékkel sózva; GEThívást intéz azopenplatformteljes értékére (a~és areqtokena query stringben marad), azx-tokenfejlécet erre arestokenértékre állítva.
Az OpenPlatform ezután (controllers/verify.js):
- a lekérdezési tokent az utolsó
~mentén szétvágja (az utána következő rész az általa küldöttreqtoken), és elutasítja a hívást, ha hiányzik a fejléc vagy a token; - ellenőrzi a munkamenet-azonosító ellenőrző összegét, beolvassa a munkamenetet, és összeveti mindkét titkot (a
reqtokenés a fejlécrestokenértéke); bármely eltérésInvalid token; - ha az alkalmazásnak van engedélyezett címek listája, ellenőrzi a hívó címét (
Not allowed IP address); - beolvassa a felhasználót, és elutasít egy letiltott (
User has been disabled) vagy inaktív (User is inactive) felhasználót; - gondoskodik róla, hogy a felhasználónak megvannak ennek az alkalmazásnak az értesítési hivatkozásai (
tbl_user_apptábla); - felépíti a választ, és átvezeti a platform
verifyátalakításán, így egy telepítés mezőket adhat hozzá.
A válasz egy JSON objektum. Az üres értékeket kihagyja. A fő mezői:
| Mező | Mi ez |
|---|---|
id, name, email, photo, gender, reference | ki a felhasználó (a photo abszolút cím) |
language, color, interface, darkmode, sounds | a beállítások (a platform nyelve és színe, ha a felhasználónak nincs) |
sa | a felhasználó a platform adminisztrátora |
permissions | a felhasználó jogosultságainak value karakterláncai ebben az alkalmazásban |
groups | a felhasználó csoportjainak azonosítói |
appid, ssid | az alkalmazás és a munkamenete ellenőrző összege |
openplatformid, openplatform | a telepítés azonosítója és címe |
iframe | true, kivéve ha az alkalmazás külső |
notify | a cím, ahová az értesítéseket küldeni kell, ha a felhasználó elfogadja őket (értesítések) |
platform | a platform name és logo értéke, a groups és a felhasználó alkalmazásai |
A választ egy memóriabeli gyorsítótár tárolja a munkamenet tokenjével (a ~ előtti rész) kulcsolva, és a gyorsítótár kétpercenként törlődik. Az ebben a gyorsítótárban lévő tokennel érkező hívást a gyorsítótárból válaszolja meg, még a titkok újbóli összevetése előtt, így az ezen időn belüli ismételt ellenőrzés olcsó.
3. Újabb kérdezés később
A GET /session/ az alkalmazás által kapott ssid értéket veszi (a paraméter nevének az openplatformid, a token és a session is elfogadott), ellenőrzi az ellenőrző összegét, és visszaadja a felhasználót (id, language, name, color, sa, isonline), amíg a felhasználó munkamenete nem járt le.
Mire emlékezz az alkalmazás építésekor
- Soha ne küldd a megosztott titkokat a böngészőnek: csak az alkalmazás szerverének van rájuk szüksége.
- A szerveren ellenőrizz, és a válaszból hozd létre a saját munkamenetedet; az
openplatformparaméter egyetlen indításra való. - A válasz
permissionsértékeit használd, ne a böngésző által küldött szerepkört. - A Total.js 5-ben van natív kliens ehhez a protokollcsaládhoz: lásd OPENCLIENT.