ForgeOpenPlatform
el

OpenPlatform

Πώς συνδέεται μια εφαρμογή με το OpenPlatform: η εκκίνηση και η επαλήθευση

OpenPlatform · openplatform@5 openplatformprotocoltokensverifysso

Όταν ένας χρήστης ανοίγει μια εφαρμογή, το OpenPlatform δεν της στέλνει κωδικό ή cookie. Της στέλνει μια διεύθυνση εκκίνησης μίας χρήσης, και η εφαρμογή καλεί πίσω το OpenPlatform για να μάθει ποιος είναι ο χρήστης. Αυτή η σελίδα ακολουθεί τον κώδικα (schemas/account.js, ενέργεια Account/run και controllers/verify.js).

1. Η εκκίνηση

Όταν ο χρήστης κάνει κλικ σε μια εφαρμογή, η πύλη καλεί το API run/{appid}. Το OpenPlatform:

  1. ελέγχει ότι η εφαρμογή βρίσκεται στη λίστα του χρήστη (αλλιώς App not found) και ότι δεν είναι απενεργοποιημένη·
  2. δημιουργεί μια συνεδρία της εφαρμογής (πίνακας tbl_app_session) που λήγει σύμφωνα με τη ρύθμιση app_session_expire (μία ημέρα από προεπιλογή)·
  3. χτίζει τη διεύθυνση επαλήθευσης: το url της πλατφόρμας + /verify/?token= + το αναγνωριστικό της συνεδρίας ενωμένο με το αναγνωριστικό της εγκατάστασης με X, ακολουθούμενο από X και ένα άθροισμα ελέγχου (FUNC.checksum, που χρησιμοποιεί το μυστικό saltchecksum)·
  4. παράγει τα δύο tokens αυτής της συνεδρίας από τα κοινά μυστικά της εφαρμογής:
    • reqtoken = το MD5 της διεύθυνσης επαλήθευσης με salt το reqtoken της εφαρμογής, με πεζά·
    • restoken = το MD5 αυτού του reqtoken με salt το restoken της εφαρμογής·
  • ανοίγει την εφαρμογή στο url της με μία επιπλέον παράμετρο ερωτήματος: openplatform=<verification address>~<reqtoken>.
  • Για μια εφαρμογή που έχει σημειωθεί ως σελιδοδείκτης δεν υπάρχει χειραψία: η διεύθυνση παίρνει αντ’ αυτού ssid=<session checksum>.

    2. Η επαλήθευση

    Η εφαρμογή παίρνει την τιμή του openplatform, που είναι η διεύθυνση επαλήθευσης, ένα ~ και το reqtoken της συνεδρίας, και:

    1. υπολογίζει το δικό της restoken: το MD5 του reqtoken με salt το restoken που μοιράζεται με το OpenPlatform·
    2. καλεί με GET ολόκληρη την τιμή του openplatform (το ~ και το reqtoken μένουν στο query string) με την κεφαλίδα x-token ορισμένη σε αυτό το restoken.

    Το OpenPlatform στη συνέχεια (controllers/verify.js):

    1. χωρίζει το token του ερωτήματος στο τελευταίο ~ (το τμήμα μετά είναι το reqtoken που έστειλε) και απορρίπτει την κλήση όταν λείπει η κεφαλίδα ή το token·
    2. ελέγχει το άθροισμα ελέγχου του αναγνωριστικού συνεδρίας, διαβάζει τη συνεδρία και συγκρίνει και τα δύο μυστικά (reqtoken και το restoken της κεφαλίδας)· οποιαδήποτε διαφορά είναι Invalid token·
    3. αν η εφαρμογή έχει λίστα επιτρεπόμενων διευθύνσεων, ελέγχει τη διεύθυνση του καλούντος (Not allowed IP address)·
    4. διαβάζει τον χρήστη και απορρίπτει έναν απενεργοποιημένο (User has been disabled) ή ανενεργό (User is inactive) χρήστη·
    5. φροντίζει ώστε ο χρήστης να έχει τους συνδέσμους ειδοποιήσεων αυτής της εφαρμογής (πίνακας tbl_user_app)·
    6. χτίζει την απάντηση και την περνά από τον μετασχηματισμό verify της πλατφόρμας, ώστε μια εγκατάσταση να μπορεί να προσθέσει πεδία.

    Η απάντηση είναι ένα αντικείμενο JSON. Οι κενές τιμές παραλείπονται. Τα κύρια πεδία της είναι:

    ΠεδίοΤι είναι
    id, name, email, photo, gender, referenceποιος είναι ο χρήστης (το photo είναι απόλυτη διεύθυνση)
    language, color, interface, darkmode, soundsοι προτιμήσεις (η γλώσσα και το χρώμα της πλατφόρμας όταν ο χρήστης δεν έχει)
    saο χρήστης είναι διαχειριστής της πλατφόρμας
    permissionsοι συμβολοσειρές value των δικαιωμάτων του χρήστη σε αυτή την εφαρμογή
    groupsτα αναγνωριστικά των ομάδων του χρήστη
    appid, ssidη εφαρμογή και το άθροισμα ελέγχου της συνεδρίας της
    openplatformid, openplatformτο αναγνωριστικό και η διεύθυνση της εγκατάστασης
    iframetrue εκτός αν η εφαρμογή είναι εξωτερική
    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.