Πώς συνδέεται μια εφαρμογή με το OpenPlatform: η εκκίνηση και η επαλήθευση
Όταν ένας χρήστης ανοίγει μια εφαρμογή, το OpenPlatform δεν της στέλνει κωδικό ή cookie. Της στέλνει μια διεύθυνση εκκίνησης μίας χρήσης, και η εφαρμογή καλεί πίσω το OpenPlatform για να μάθει ποιος είναι ο χρήστης. Αυτή η σελίδα ακολουθεί τον κώδικα (schemas/account.js, ενέργεια Account/run και controllers/verify.js).
1. Η εκκίνηση
Όταν ο χρήστης κάνει κλικ σε μια εφαρμογή, η πύλη καλεί το API run/{appid}. Το OpenPlatform:
- ελέγχει ότι η εφαρμογή βρίσκεται στη λίστα του χρήστη (αλλιώς
App not found) και ότι δεν είναι απενεργοποιημένη· - δημιουργεί μια συνεδρία της εφαρμογής (πίνακας
tbl_app_session) που λήγει σύμφωνα με τη ρύθμισηapp_session_expire(μία ημέρα από προεπιλογή)· - χτίζει τη διεύθυνση επαλήθευσης: το
urlτης πλατφόρμας +/verify/?token=+ το αναγνωριστικό της συνεδρίας ενωμένο με το αναγνωριστικό της εγκατάστασης μεX, ακολουθούμενο απόXκαι ένα άθροισμα ελέγχου (FUNC.checksum, που χρησιμοποιεί το μυστικόsaltchecksum)· - παράγει τα δύο tokens αυτής της συνεδρίας από τα κοινά μυστικά της εφαρμογής:
reqtoken= το MD5 της διεύθυνσης επαλήθευσης με salt τοreqtokenτης εφαρμογής, με πεζά·restoken= το MD5 αυτού τουreqtokenμε salt τοrestokenτης εφαρμογής·
url της με μία επιπλέον παράμετρο ερωτήματος: openplatform=<verification address>~<reqtoken>.Για μια εφαρμογή που έχει σημειωθεί ως σελιδοδείκτης δεν υπάρχει χειραψία: η διεύθυνση παίρνει αντ’ αυτού ssid=<session checksum>.
2. Η επαλήθευση
Η εφαρμογή παίρνει την τιμή του openplatform, που είναι η διεύθυνση επαλήθευσης, ένα ~ και το reqtoken της συνεδρίας, και:
- υπολογίζει το δικό της
restoken: το MD5 τουreqtokenμε salt τοrestokenπου μοιράζεται με το OpenPlatform· - καλεί με
GETολόκληρη την τιμή τουopenplatform(το~και τοreqtokenμένουν στο query string) με την κεφαλίδαx-tokenορισμένη σε αυτό τοrestoken.
Το OpenPlatform στη συνέχεια (controllers/verify.js):
- χωρίζει το token του ερωτήματος στο τελευταίο
~(το τμήμα μετά είναι τοreqtokenπου έστειλε) και απορρίπτει την κλήση όταν λείπει η κεφαλίδα ή το token· - ελέγχει το άθροισμα ελέγχου του αναγνωριστικού συνεδρίας, διαβάζει τη συνεδρία και συγκρίνει και τα δύο μυστικά (
reqtokenκαι τοrestokenτης κεφαλίδας)· οποιαδήποτε διαφορά είναιInvalid token· - αν η εφαρμογή έχει λίστα επιτρεπόμενων διευθύνσεων, ελέγχει τη διεύθυνση του καλούντος (
Not allowed IP address)· - διαβάζει τον χρήστη και απορρίπτει έναν απενεργοποιημένο (
User has been disabled) ή ανενεργό (User is inactive) χρήστη· - φροντίζει ώστε ο χρήστης να έχει τους συνδέσμους ειδοποιήσεων αυτής της εφαρμογής (πίνακας
tbl_user_app)· - χτίζει την απάντηση και την περνά από τον μετασχηματισμό
verifyτης πλατφόρμας, ώστε μια εγκατάσταση να μπορεί να προσθέσει πεδία.
Η απάντηση είναι ένα αντικείμενο JSON. Οι κενές τιμές παραλείπονται. Τα κύρια πεδία της είναι:
| Πεδίο | Τι είναι |
|---|---|
id, name, email, photo, gender, reference | ποιος είναι ο χρήστης (το photo είναι απόλυτη διεύθυνση) |
language, color, interface, darkmode, sounds | οι προτιμήσεις (η γλώσσα και το χρώμα της πλατφόρμας όταν ο χρήστης δεν έχει) |
sa | ο χρήστης είναι διαχειριστής της πλατφόρμας |
permissions | οι συμβολοσειρές value των δικαιωμάτων του χρήστη σε αυτή την εφαρμογή |
groups | τα αναγνωριστικά των ομάδων του χρήστη |
appid, ssid | η εφαρμογή και το άθροισμα ελέγχου της συνεδρίας της |
openplatformid, openplatform | το αναγνωριστικό και η διεύθυνση της εγκατάστασης |
iframe | true εκτός αν η εφαρμογή είναι εξωτερική |
notify | η διεύθυνση στην οποία στέλνονται οι ειδοποιήσεις, όταν ο χρήστης τις δέχεται (ειδοποιήσεις) |
platform | το name και το logo της πλατφόρμας, τα groups της και οι εφαρμογές του χρήστη |
Η απάντηση φυλάσσεται σε προσωρινή μνήμη στη μνήμη με κλειδί το token της συνεδρίας (το τμήμα πριν από το ~) και η μνήμη καθαρίζεται κάθε δύο λεπτά. Μια κλήση με token που βρίσκεται σε αυτή τη μνήμη απαντάται από αυτήν, πριν συγκριθούν ξανά τα μυστικά· μια επαναλαμβανόμενη επαλήθευση μέσα σε αυτόν τον χρόνο είναι λοιπόν φθηνή.
3. Νέα ερώτηση αργότερα
Το GET /session/ δέχεται το ssid που έλαβε η εφαρμογή (δέχεται επίσης τα openplatformid, token και session ως όνομα της παραμέτρου), ελέγχει το άθροισμα ελέγχου του και επιστρέφει τον χρήστη (id, language, name, color, sa, isonline) όσο δεν έχει λήξει η συνεδρία του χρήστη.
Τι να θυμάστε όταν φτιάχνετε την εφαρμογή
- Μη στέλνετε ποτέ τα κοινά μυστικά στον περιηγητή: τα χρειάζεται μόνο ο διακομιστής της εφαρμογής.
- Επαληθεύστε στον διακομιστή και δημιουργήστε τη δική σας συνεδρία από την απάντηση· η παράμετρος
openplatformισχύει για μία εκκίνηση. - Χρησιμοποιήστε τα
permissionsτης απάντησης, όχι έναν ρόλο που στέλνει ο περιηγητής. - Το Total.js 5 έχει εγγενή πελάτη για αυτή την οικογένεια πρωτοκόλλων: δείτε OPENCLIENT.