ForgeOpenPlatform
sv

OpenPlatform

Hur en applikation ansluter till OpenPlatform: starten och verifieringen

OpenPlatform · openplatform@5 openplatformprotocoltokensverifysso

När en användare öppnar en applikation skickar OpenPlatform inget lösenord eller någon cookie till den. Den skickar en startadress för engångsbruk, och applikationen ringer tillbaka till OpenPlatform för att få veta vem användaren är. Den här sidan följer koden (schemas/account.js, åtgärden Account/run och controllers/verify.js).

1. Starten

När användaren klickar på en applikation anropar portalen API:et run/{appid}. OpenPlatform:

  1. kontrollerar att applikationen finns i användarens lista (annars App not found) och att den inte är inaktiverad;
  2. skapar en session för applikationen (tabellen tbl_app_session) som löper ut enligt inställningen app_session_expire (en dag som standard);
  3. bygger verifieringsadressen: plattformens url + /verify/?token= + sessionens identifierare sammanfogad med installationens identifierare med X, följt av X och en kontrollsumma (FUNC.checksum, som använder hemligheten saltchecksum);
  4. härleder sessionens två tokens från applikationens delade hemligheter:
    • reqtoken = MD5 av verifieringsadressen saltad med applikationens reqtoken, med gemener;
    • restoken = MD5 av den reqtoken saltad med applikationens restoken;
  • öppnar applikationen på dess url med en extra frågeparameter: openplatform=<verification address>~<reqtoken>.
  • För en applikation som är markerad som bokmärke finns ingen handskakning: adressen får ssid=<session checksum> i stället.

    2. Verifieringen

    Applikationen tar värdet av openplatform, som är verifieringsadressen, ett ~ och sessionens reqtoken, och:

    1. beräknar sitt eget restoken: MD5 av reqtoken saltad med den restoken den delar med OpenPlatform;
    2. anropar med GET hela värdet av openplatform (~ och reqtoken stannar kvar i query-strängen) med headern x-token satt till den restoken.

    OpenPlatform därefter (controllers/verify.js):

    1. delar frågetoken vid det sista ~ (delen efter är den reqtoken som skickades) och avvisar anropet när headern eller token saknas;
    2. kontrollerar sessionsidentifierarens kontrollsumma, läser sessionen och jämför båda hemligheterna (reqtoken och headerns restoken); varje skillnad är Invalid token;
    3. om applikationen har en lista över tillåtna adresser kontrolleras anroparens adress (Not allowed IP address);
    4. läser användaren och avvisar en inaktiverad (User has been disabled) eller inaktiv (User is inactive) användare;
    5. ser till att användaren har den här applikationens notislänkar (tabellen tbl_user_app);
    6. bygger svaret och skickar det genom plattformens transformation verify, så att en driftsättning kan lägga till fält.

    Svaret är ett JSON-objekt. Tomma värden utelämnas. Dess huvudfält är:

    FältVad det är
    id, name, email, photo, gender, referencevem användaren är (photo är en absolut adress)
    language, color, interface, darkmode, soundsinställningarna (plattformens språk och färg när användaren inte har några)
    saanvändaren är administratör för plattformen
    permissionsvalue-strängarna för användarens behörigheter i den här applikationen
    groupsid:n för användarens grupper
    appid, ssidapplikationen och kontrollsumman för dess session
    openplatformid, openplatforminstallationens identifierare och adress
    iframetrue om inte applikationen är extern
    notifyadressen att skicka notiser till, när användaren godtar dem (notiser)
    platformplattformens name och logo, dess groups och användarens applikationer

    Svaret hålls i en minnescache med sessionens token (delen före ~) som nyckel, och cachen töms varannan minut. Ett anrop med en token som finns i den cachen besvaras därifrån, innan hemligheterna jämförs igen; en upprepad verifiering inom den tiden är därför billig.

    3. Fråga igen senare

    GET /session/ tar den ssid som applikationen fick (den accepterar också openplatformid, token och session som parameterns namn), kontrollerar dess kontrollsumma och returnerar användaren (id, language, name, color, sa, isonline) så länge användarens session inte har löpt ut.

    Vad du ska komma ihåg när du bygger applikationen

    • Skicka aldrig de delade hemligheterna till webbläsaren: bara applikationens server behöver dem.
    • Verifiera på servern och skapa din egen session utifrån svaret; parametern openplatform gäller för en start.
    • Använd svarets permissions, inte en roll som webbläsaren skickar.
    • Total.js 5 har en inbyggd klient för den här protokollfamiljen: se OPENCLIENT.