ForgeOpenPlatform
hu

OpenPlatform

Hogyan csatlakozik egy alkalmazás az OpenPlatformhoz: az indítás és az ellenőrzés

OpenPlatform · openplatform@5 openplatformprotocoltokensverifysso

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:

  1. 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;
  2. létrehoz egy alkalmazásmunkamenetet (tbl_app_session tábla), amely az app_session_expire beállítás szerint jár le (alapértelmezés szerint egy nap);
  3. felépíti az ellenőrzési címet: a platform url címe + /verify/?token= + a munkamenet azonosítója X-szel összefűzve a telepítés azonosítójával, majd X és egy ellenőrző összeg (FUNC.checksum, amely a saltchecksum titkot használja);
  4. 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ás reqtoken értékével sózva, kisbetűvel;
    • restoken = az adott reqtoken MD5 értéke az alkalmazás restoken értékével sózva;
  • megnyitja az alkalmazást az 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:

    1. kiszámítja a saját restoken értékét: a reqtoken MD5 értékét az OpenPlatformmal megosztott restoken értékkel sózva;
    2. GET hívást intéz az openplatform teljes értékére (a ~ és a reqtoken a query stringben marad), az x-token fejlécet erre a restoken értékre állítva.

    Az OpenPlatform ezután (controllers/verify.js):

    1. a lekérdezési tokent az utolsó ~ mentén szétvágja (az utána következő rész az általa küldött reqtoken), és elutasítja a hívást, ha hiányzik a fejléc vagy a token;
    2. ellenőrzi a munkamenet-azonosító ellenőrző összegét, beolvassa a munkamenetet, és összeveti mindkét titkot (a reqtoken és a fejléc restoken értéke); bármely eltérés Invalid token;
    3. ha az alkalmazásnak van engedélyezett címek listája, ellenőrzi a hívó címét (Not allowed IP address);
    4. beolvassa a felhasználót, és elutasít egy letiltott (User has been disabled) vagy inaktív (User is inactive) felhasználót;
    5. gondoskodik róla, hogy a felhasználónak megvannak ennek az alkalmazásnak az értesítési hivatkozásai (tbl_user_app tábla);
    6. 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, referenceki a felhasználó (a photo abszolút cím)
    language, color, interface, darkmode, soundsa beállítások (a platform nyelve és színe, ha a felhasználónak nincs)
    saa felhasználó a platform adminisztrátora
    permissionsa felhasználó jogosultságainak value karakterláncai ebben az alkalmazásban
    groupsa felhasználó csoportjainak azonosítói
    appid, ssidaz alkalmazás és a munkamenete ellenőrző összege
    openplatformid, openplatforma telepítés azonosítója és címe
    iframetrue, kivéve ha az alkalmazás külső
    notifya cím, ahová az értesítéseket küldeni kell, ha a felhasználó elfogadja őket (értesítések)
    platforma 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 openplatform paramé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.