Hur en applikation ansluter till OpenPlatform: starten och verifieringen
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:
- kontrollerar att applikationen finns i användarens lista (annars
App not found) och att den inte är inaktiverad; - skapar en session för applikationen (tabellen
tbl_app_session) som löper ut enligt inställningenapp_session_expire(en dag som standard); - bygger verifieringsadressen: plattformens
url+/verify/?token=+ sessionens identifierare sammanfogad med installationens identifierare medX, följt avXoch en kontrollsumma (FUNC.checksum, som använder hemlighetensaltchecksum); - härleder sessionens två tokens från applikationens delade hemligheter:
reqtoken= MD5 av verifieringsadressen saltad med applikationensreqtoken, med gemener;restoken= MD5 av denreqtokensaltad med applikationensrestoken;
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:
- beräknar sitt eget
restoken: MD5 avreqtokensaltad med denrestokenden delar med OpenPlatform; - anropar med
GEThela värdet avopenplatform(~ochreqtokenstannar kvar i query-strängen) med headernx-tokensatt till denrestoken.
OpenPlatform därefter (controllers/verify.js):
- delar frågetoken vid det sista
~(delen efter är denreqtokensom skickades) och avvisar anropet när headern eller token saknas; - kontrollerar sessionsidentifierarens kontrollsumma, läser sessionen och jämför båda hemligheterna (
reqtokenoch headernsrestoken); varje skillnad ärInvalid token; - om applikationen har en lista över tillåtna adresser kontrolleras anroparens adress (
Not allowed IP address); - läser användaren och avvisar en inaktiverad (
User has been disabled) eller inaktiv (User is inactive) användare; - ser till att användaren har den här applikationens notislänkar (tabellen
tbl_user_app); - 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ält | Vad det är |
|---|---|
id, name, email, photo, gender, reference | vem användaren är (photo är en absolut adress) |
language, color, interface, darkmode, sounds | inställningarna (plattformens språk och färg när användaren inte har några) |
sa | användaren är administratör för plattformen |
permissions | value-strängarna för användarens behörigheter i den här applikationen |
groups | id:n för användarens grupper |
appid, ssid | applikationen och kontrollsumman för dess session |
openplatformid, openplatform | installationens identifierare och adress |
iframe | true om inte applikationen är extern |
notify | adressen att skicka notiser till, när användaren godtar dem (notiser) |
platform | plattformens 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
openplatformgä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.