Ασφάλεια για απομακρυσμένα συστατικά στοιχεία

Oracle Content Management επιτρέπει σε τρίτους προγραμματιστές να ενσωματώνουν τα προσαρμοσμένα συστατικά στοιχεία τους στην πλατφόρμα Oracle Content Management αλλά να τα αποθηκεύουν σε έναν απομακρυσμένο server.

Κάθε απομακρυσμένο συστατικό στοιχείο πρέπει να έχει εγγεγραμμένες ρυθμίσεις και τελικά σημεία απόδοσης στο Oracle Content Management. Επιπλέον με τα τελικά σημεία, οι προγραμματιστές πρέπει επίσης να παρέχουν ένα μυστικό κλειδί που είναι μοναδικό για το εγγεγραμμένο συστατικό στοιχείο.

Oracle Content Management καλεί τα τελικά σημεία του εγγεγραμμένου συστατικού στοιχείου για την υλοποίηση του περιεχομένου σε μια σελίδα τοποθεσίας. Επειδή αυτά τα τελικά σημεία είναι εκτεθειμένα στο δημόσιο Internet, οι προγραμματιστές πρέπει να επαληθεύσουν ότι τα τελικά σημεία ενός εγγεγραμμένου απομακρυσμένου συστατικού στοιχείου καλούνται από το Oracle Content Management. Για επαλήθευση της αυθεντικότητας του καλούντος, παραδίδεται ένα υπογεγραμμένο διακριτικό στα εγγεγραμμένα τελικά σημεία μιας διεύθυνσης τοποθεσίας. Η ταυτότητα του καλούντος ελέγχεται επαληθεύοντας την ψηφιακή υπογραφή που είναι ενσωματωμένη στο υπογεγραμμένο διακριτικό με το μυστικό κλειδί του απομακρυσμένου συστατικού στοιχείου που παρασχέθηκε κατά τη διαδικασία εγγραφής.

Η μορφή του διακριτικού είναι:

{base64 encoded serialized JSON data}.{base64 encoded signature}

Ακολουθεί ένα δείγμα διακριτικού που μεταβιβάστηκε στα εγγεγραμμένα τελικά σημεία εφαρμογών:

eyJpbnN0YW5jZWlkIjoiQTRGOTE3REY5OTZEN0Q3ODBCMjUzODZFOTFEMDA3ODJGMjVBRjY2Rjc3OTIiLCJzaWduZGF0ZSI6IjE0NDU2MzcwNTk5MTciLCJzaXRlZG9tYWluIjoic2VydmljZTEtdGVuYW50MS51cy5vcmFjbGUuY29tIiwicGVybWlzc2lvbnMiOiJTSVRFX09XTkVSIiwiZW50aXRsZW1lbnRzIjoiIn0=.5p3of7t11OwuysF3zpm+YgICSHH8C/BHczdbVZx2VH8=

Το διακριτικό αποτελείται από δύο διακριτά μέρη: τα δεδομένα και την υπογραφή που διαχωρίζονται με '.'.

Ως γενική οδηγία, οι προγραμματιστές πρέπει να ελέγχουν πάντα την ταυτότητα του διακριτικού σε λειτουργία επεξεργασίας ή προεπισκόπησης προτού εκχωρήσουν πρόσβαση σε εγγεγραμμένα τελικά σημεία ενός συστατικού στοιχείου. Επιπλέον, παρόλο που εκτελείται έλεγχος ταυτότητας του καλούντος στο τελικό σημείο ρυθμίσεων, οι προγραμματιστές πρέπει πάντα να φροντίζουν να αναζητούν μια τιμή SITE_OWNER στο πεδίο "δικαιώματα" του διακριτικού. Το πεδίο "δικαώματα" του διακριτικού εμφανίζει την τιμή SITE_OWNER μόνο σε λειτουργία επεξεργασίας. Ένα διακριτικό που δημιουργείται σε μια περίοδο λειτουργίας επεξεργασίας δεν διατηρείται ποτέ στο μοντέλο σελίδας και εναλλάσσεται με ένα διακριτικό χρόνου εκτέλεσης που έχει τιμή NULL στο πεδίο "δικαιώματα".

Δεδομένα

Το τμήμα δεδομένων του στιγμιότυπου είναι μια συμβολοσειρά με κωδικοποίηση JSON Base64. Ακολουθεί η δομή της συμβολοσειράς JSON:

{
  "instanceid": "BBDC7614F693B75110D811E6C0B77C935FAEC5112E5E",
  "permissions": "",
  "entitlements": "",
  "signdate": "1435426735293",
  "sitedomain": "service1-tenant4.localhost"
}
Όνομα πεδίου Περιγραφή

instanceid

Μοναδικό αναγνωριστικό ενός συστατικού στοιχείου για έναν μισθωτήOracle Content Management.

signdate

Ημερομηνία δημιουργίας υπογραφής.

sitedomain

Όνομα τομέα του στιγμιότυπου Oracle Content Management.

permissions

Σύνολο δικαιωμάτων του μέλους τοποθεσίας. Στη λειτουργία επεξεργασίας, θα έχει την τιμή "SITE_OWNER", διαφορετικά, δεν θα έχει τιμή.

entitlements

Λίστα με τις λειτουργίες premium που αγόρασε ο κάτοχος της τοποθεσίας.

Υπογραφή

Το τμήμα δεδομένων του στιγμιότυπου απομακρυσμένου συστατικού στοιχείου σειριοποιείται πριν υπογραφεί από ένα APP_SECRET_KEY. Αυτό το μυστικό κλειδί πρέπει να δημιουργηθεί και να εμφανιστεί στον προγραμματιστή κατά την εγγραφή ενός συστατικού στοιχείου. Η υπογραφή υπολογίζεται δημιουργώντας έναν κατακερματισμό του τμήματος δεδομένων του στιγμιότυπου συστατικού στοιχείου (μια σειριοποιημένη δομή JSON) με το μυστικό κλειδί όπως εμφανίζεται εδώ:

$signature = HMAC (serialized JSON structure, APP_SECRET_KEY)

Ο αλγόριθμος κατακερματισμού που χρησιμοποιείται στη δημιουργία της υπογραφής είναι SHA256. Το διακριτικό είναι, στη συνέχεια, η συνένωση της σειριοποιημένης δομής JSON και του δημιουργημένου συστατικού στοιχείου υπογραφής, όπως εμφανίζεται εδώ:

$instance = {base64encoded serialized JSON structure}.{base64encoded $signature}