Wie sich eine Anwendung mit OpenPlatform verbindet: der Start und die Verifizierung
Wenn ein Benutzer eine Anwendung öffnet, sendet OpenPlatform ihr weder ein Passwort noch ein Cookie. Es sendet eine einmalige Startadresse, und die Anwendung ruft OpenPlatform zurück, um zu erfahren, wer der Benutzer ist. Diese Seite folgt dem Code (schemas/account.js, Aktion Account/run, und controllers/verify.js).
1. Der Start
Wenn der Benutzer auf eine Anwendung klickt, ruft das Portal die API run/{appid} auf. OpenPlatform:
- prüft, dass die Anwendung in der Liste des Benutzers steht (sonst
App not found) und nicht deaktiviert ist; - erstellt eine Sitzung der Anwendung (Tabelle
tbl_app_session), die nach der Einstellungapp_session_expireabläuft (standardmäßig ein Tag); - baut die Verifizierungsadresse: die
urlder Plattform +/verify/?token=+ die Kennung der Sitzung, mitXverbunden mit der Kennung der Installation, gefolgt vonXund einer Prüfsumme (FUNC.checksum, die das Geheimnissaltchecksumverwendet); - leitet die beiden Tokens dieser Sitzung aus den gemeinsamen Geheimnissen der Anwendung ab:
reqtoken= der MD5 der Verifizierungsadresse mit demreqtokender Anwendung als Salt, in Kleinbuchstaben;restoken= der MD5 diesesreqtokenmit demrestokender Anwendung als Salt;
url mit einem zusätzlichen Query-Parameter: openplatform=<verification address>~<reqtoken>.Bei einer als Lesezeichen markierten Anwendung gibt es keinen Handshake: Die Adresse erhält stattdessen ssid=<session checksum>.
2. Die Verifizierung
Die Anwendung nimmt den Wert von openplatform, also die Verifizierungsadresse, ein ~ und das reqtoken der Sitzung, und:
- berechnet ihr eigenes
restoken: den MD5 desreqtokenmit demrestoken, das sie mit OpenPlatform teilt, als Salt; - ruft
GETauf den gesamten Wert vonopenplatformauf (das~und dasreqtokenbleiben in der Query-String) mit dem Headerx-token, der auf diesesrestokengesetzt ist.
OpenPlatform dann (controllers/verify.js):
- teilt das Query-Token am letzten
~(der Teil danach ist dasreqtoken, das es gesendet hat) und weist den Aufruf ab, wenn Header oder Token fehlen; - prüft die Prüfsumme der Sitzungskennung, liest die Sitzung und vergleicht beide Geheimnisse (
reqtokenund dasrestokendes Headers); jede Abweichung istInvalid token; - hat die Anwendung eine Liste erlaubter Adressen, prüft es die Adresse des Aufrufers (
Not allowed IP address); - liest den Benutzer und weist einen deaktivierten (
User has been disabled) oder inaktiven (User is inactive) Benutzer ab; - stellt sicher, dass der Benutzer die Benachrichtigungslinks dieser Anwendung hat (Tabelle
tbl_user_app); - baut die Antwort und schickt sie durch die Transformation
verifyder Plattform, sodass eine Bereitstellung Felder hinzufügen kann.
Die Antwort ist ein JSON-Objekt. Leere Werte werden darin weggelassen. Ihre wichtigsten Felder sind:
| Feld | Was es ist |
|---|---|
id, name, email, photo, gender, reference | wer der Benutzer ist (photo ist eine absolute Adresse) |
language, color, interface, darkmode, sounds | die Einstellungen (Sprache und Farbe der Plattform, wenn der Benutzer keine hat) |
sa | der Benutzer ist Administrator der Plattform |
permissions | die value-Zeichenketten der Berechtigungen des Benutzers in dieser Anwendung |
groups | die Ids der Gruppen des Benutzers |
appid, ssid | die Anwendung und die Prüfsumme ihrer Sitzung |
openplatformid, openplatform | die Kennung und die Adresse der Installation |
iframe | true, außer die Anwendung ist extern |
notify | die Adresse, an die Benachrichtigungen gesendet werden, wenn der Benutzer sie akzeptiert (Benachrichtigungen) |
platform | der name und das logo der Plattform, ihre groups und die Anwendungen des Benutzers |
Die Antwort wird in einem Speicher-Cache gehalten, der nach dem Token der Sitzung (dem Teil vor dem ~) indiziert ist, und der Cache wird alle zwei Minuten geleert. Ein Aufruf mit einem Token, das in diesem Cache liegt, wird daraus beantwortet, bevor die Geheimnisse erneut verglichen werden; eine wiederholte Verifizierung in dieser Zeit ist also billig.
3. Später erneut nachfragen
GET /session/ nimmt das ssid, das die Anwendung erhalten hat (es akzeptiert auch openplatformid, token und session als Parametername), prüft dessen Prüfsumme und gibt den Benutzer zurück (id, language, name, color, sa, isonline), solange die Sitzung des Benutzers nicht abgelaufen ist.
Was Sie beim Bauen der Anwendung beachten sollten
- Liefern Sie die gemeinsamen Geheimnisse niemals an den Browser aus: Nur der Server der Anwendung braucht sie.
- Verifizieren Sie auf dem Server und erzeugen Sie aus der Antwort Ihre eigene Sitzung; der Parameter
openplatformgilt für einen Start. - Verwenden Sie die
permissionsder Antwort, nicht eine Rolle, die der Browser sendet. - Total.js 5 hat einen nativen Client für diese Protokollfamilie: siehe OPENCLIENT.