1.1 Εισαγωγή

Ένα μεγάλο μέρος του Ocean αφορά τον έλεγχο πρόσβασης, της αποκεντρωμένης μορφής. Η βασική προσέγγιση του Ocean είναι τα datatokens: ένας καταναλωτής μπορεί να έχει πρόσβαση σε έναν πόρο (π.χ. ένα αρχείο) εξαργυρώνοντας 1.0 από τα datatokens για τον πόρο αυτό. Τα datatokens ακολουθούν το πρότυπο ERC20.

Οι επιχειρήσεις και άλλοι χρήστες χρειάζονται συχνά πιο ακριβείς τρόπους για να καθορίζουν και να διαχειρίζονται την πρόσβαση. Σκεφτείτε μια περίπτωση χρήσης ιατρικών δεδομένων, όπου μόνο ένας ερευνητής της ΕΕ με τα κατάλληλα διαπιστευτήρια μπορεί να περιηγηθεί στα διαθέσιμα σύνολα ιατρικών δεδομένων ή να κατεβάσει τα ίδια τα σύνολα δεδομένων. Ή τι θα συνέβαινε αν κάποιος ήθελε να περιορίσει στους υπαλλήλους μιας συγκεκριμένης χώρας, ή κοινοπραξίας, περιοχής ή ενός συνδυασμού αυτών; Τέτοιες ερωτήσεις τέθηκαν συχνά από τους συνεργάτες μας σε επιχειρήσεις.

Αυτό σημαίνει ότι το Ocean πρέπει να εξετάσει τον τρόπο ελέγχου της πρόσβασης με μεγαλύτερη ακρίβεια, σε αυτά τα δύο επίπεδα:

  1. Λεπτομερή δικαιώματα σε επίπεδο αγοράς για περιήγηση, δημοσίευση κ.λπ. σε ένα frontend αγοράς
  2. Λεπτομερή δικαιώματα σε επίπεδο περιουσιακού στοιχείου για την κατανάλωση του ίδιου του περιουσιακού στοιχείου

Το Ocean έχει τώρα υποστήριξη και για τα δύο.

Το παρόν άρθρο οργανώνεται ως εξής.

  • Το υπόλοιπο τμήμα της Ενότητας 1 περιγράφει τις προσεγγίσεις υψηλού επιπέδου για το (1) και το (2) και πώς συμβιβάζονται με τον έλεγχο πρόσβασης βάσει ρόλων (RBAC) και τα datatokens.
  • Η ενότητα 2 παρέχει λεπτομέρειες σχετικά με τα λεπτομερή δικαιώματα σε επίπεδο αγοράς
  • Η ενότητα 3 παρέχει λεπτομέρειες σχετικά με τα λεπτομερή δικαιώματα σε επίπεδο περιουσιακών στοιχείων.
  • Η ενότητα 4 καταλήγει στα λεπτομερή δικαιώματα

1.2. Δικαιώματα σε επίπεδο αγοράς:

Επιστροφή στην περίπτωση χρήσης ιατρικών δεδομένων: μόνο ένας ερευνητής της ΕΕ με τα κατάλληλα διαπιστευτήρια μπορεί να χρησιμοποιήσει τα δεδομένα της αγοράς. Πώς να καθορίσετε ποιος μπορεί να έχει πρόσβαση σε αυτά;

Μια πρώτη ιδέα θα ήταν να υπάρχει ένας κατάλογος όλων των "επιτρεπόμενων" ατόμων. Αλλά αυτό έχει προβλήματα. Φανταστείτε μια επιχείρηση που δημοσιεύει 1000 περιουσιακά στοιχεία δεδομένων και για κάθε περιουσιακό στοιχείο έχει έναν κατάλογο με όλους τους υπαλλήλους της. Αν προσληφθεί κάποιος νέος, θα πρέπει να ενημερώσει και τα 1000 περιουσιακά στοιχεία.

Ευτυχώς, υπάρχει ένας καθαρότερος τρόπος. Η πρόσβαση βασίζεται σε έναν ρόλο, ο οποίος καθορίζεται ως διαπιστευτήριο. Π.χ. "είναι υπάλληλος της x". Για να συνεχίσουμε το παραπάνω παράδειγμα: οι νεοπροσληφθέντες μπορεί να λάβουν το διαπιστευτήριο όταν ενταχθούν στην εταιρεία. Εφόσον έχουν το διαπιστευτήριο, έχουν δικαίωμα πρόσβασης. Αυτό είναι όλο :) Αυτή η προσέγγιση που βασίζεται σε διαπιστευτήρια είναι γνωστή στη βιομηχανία δεδομένων ως έλεγχος πρόσβασης βάσει ρόλων (RBAC).

Για τα δικαιώματα σε επίπεδο αγοράς, το Ocean εφαρμόζει το RBAC μέσω ενός "διακομιστή RBAC". Εφαρμόζει περιορισμούς σε επίπεδο χρήστη, με βάση το ρόλο του χρήστη (διαπιστευτήρια).

Ο διακομιστής RBAC εκτελείται και ελέγχεται από την αγορά. Ως εκ τούτου, τα δικαιώματα σε αυτό το επίπεδο καθορίζονται από την αγορά.

1.3 Δικαιώματα επιπέδου περιουσιακού στοιχείου: Επισκόπηση

Ας επιστρέψουμε στην περίπτωση χρήσης ιατρικών δεδομένων, όπου μόνο ένας ερευνητής της ΕΕ με τα κατάλληλα διαπιστευτήρια μπορεί να κατεβάσει τα σύνολα δεδομένων.

Πώς το χειριζόμαστε αυτό; Υπάρχει μια ένταση:

  • Τα datatokens από μόνα τους δεν αρκούν - αυτό θα σήμαινε ότι οποιοσδήποτε με 1,0 datatokens θα μπορούσε να έχει πρόσβαση σε αυτά τα δεδομένα.
  • Ωστόσο, θέλουμε να διατηρήσουμε την προσέγγιση των datatokens, καθώς επιτρέπουν στους χρήστες του Ocean να αξιοποιήσουν την υπάρχουσα υποδομή κρυπτονομισμάτων για να αποκτήσουν πορτοφόλια δεδομένων, ανταλλαγές δεδομένων, ενώσεις δεδομένων και πολλά άλλα έτοιμα για χρήση. Τα χιλιάδες ανθρωποέτη προσπάθειας που αφιερώθηκαν για τη δημιουργία αυτών των εργαλείων κρυπτονομισμάτων μπορούν να χρησιμοποιηθούν άμεσα ως εργαλεία για ένα οικοσύστημα δεδομένων.

Μπορούμε να επιλύσουμε αυτή την ένταση βασιζόμενοι στο ακόλουθο νοητικό μοντέλο:

Φανταστείτε να πηγαίνετε σε μια ροκ συναυλία άνω των 18 ετών. Μπορείτε να μπείτε μόνο αν επιδείξετε (α) το εισιτήριο της συναυλίας και (β) μια ταυτότητα που να δείχνει ότι είστε αρκετά μεγάλος.

Μπορούμε να μεταφέρουμε αυτό το μοντέλο στο Ocean, όπου το (α) είναι ένα datatoken και το (β) είναι ένα διαπιστευτήριο. Το datatoken είναι ο βασικός έλεγχος πρόσβασης. Είναι ανταλλάξιμο και κάτι για το οποίο έχετε πληρώσει ή το οποίο έχετε μοιραστεί μαζί σας. Είναι ανεξάρτητο από την ταυτότητά σας. Το διαπιστευτήριο είναι κάτι που είναι συνάρτηση της ταυτότητάς σας ή των ρόλων σας στην κοινωνία (τα πράγματα RBAC).

Το Ocean υποστηρίζει τώρα λεπτομερή δικαιώματα για έλεγχο πρόσβασης βάσει περιουσιακών στοιχείων. Ακούστε πώς: ένας καταναλωτής μπορεί να έχει πρόσβαση στον πόρο μόνο αν έχει datatokens 1.0 και ένα από τα διαπιστευτήρια στη λίστα "allow" του DDO.

Το Ocean διαθέτει επίσης συμπληρωματική λειτουργία άρνησης: εάν ένας καταναλωτής βρίσκεται στη λίστα "άρνησης", δεν θα του επιτραπεί η πρόσβαση στον πόρο. Οι κανόνες συνδυάζονται ως εξής:

Πρόσβαση = επιτρέπεται - απορρίπτεται.

Επιτρέπεται = όλοι από προεπιλογή, ή επιτρέψτε τη λίστα αν έχει καταχωρήσεις.

Απορρίπτεται = καταχωρήσεις στη λίστα απορρίψεων.

Αρχικά, τα μόνα διαπιστευτήρια που υποστηρίζονται είναι οι δημόσιες διευθύνσεις Ethereum. Για να είμαστε δίκαιοι, είναι περισσότερο ένας δείκτης σε ένα άτομο, όχι ένα διαπιστευτήριο, αλλά έχει μια εφαρμογή χαμηλής πολυπλοκότητας και αποτελεί ένα καλό σημείο εκκίνησης. Για λόγους επεκτασιμότητας, το σχήμα μεταδεδομένων του Ocean επιτρέπει την προδιαγραφή άλλων τύπων διαπιστευτηρίων, όπως τα επαληθεύσιμα διαπιστευτήρια του W3C και άλλα. Όταν αυτό υλοποιηθεί, τα δικαιώματα σε επίπεδο περιουσιακών στοιχείων θα είναι επίσης σωστά RBAC:)

Δεδομένου ότι τα δικαιώματα σε επίπεδο περιουσιακού στοιχείου βρίσκονται στο DDO και το DDO ελέγχεται από τον εκδότη, οι περιορισμοί σε επίπεδο περιουσιακού στοιχείου ελέγχονται από τον εκδότη.

2. Δικαιώματα επιπέδου αγοράς: Λεπτομέρειες

2.1 Περίγραμμα

Αυτή η λειτουργία έχει σχεδιαστεί ειδικά για να λειτουργεί σε διακλαδώσεις του Ocean Market και δεν απαιτείται. Δεν τα έχουμε ενεργοποιήσει στο ίδιο το Ocean Market, για να διατηρήσουμε το Ocean Market ανοιχτό για χρήση από όλους. Στο μπροστινό μέρος, τα χαρακτηριστικά των δικαιωμάτων ενεργοποιούνται εύκολα σε μία διακλάδωση της αγοράς, ορίζοντας μεταβλητές περιβάλλοντος. Στο back end, ο διακομιστής RBAC μπορεί να αναπτυχθεί και να συντηρηθεί ειδικά για το έργο σας.

Ο κύριος μηχανισμός με τον οποίο οι αγορές περιορίζουν τη δυνατότητα των χρηστών τους να δημοσιεύουν, να καταναλώνουν ή να περιηγούνται είναι ο διακομιστής ελέγχου πρόσβασης βάσει ρόλων (RBAC).

Το Σχήμα 1 δείχνει τον τρόπο με τον οποίο η αγορά αλληλεπιδρά με τον διακομιστή RBAC για την επικύρωση των δικαιωμάτων του χρήστη. Όταν ένας χρήστης συνδέει ένα πορτοφόλι με την αγορά, υποβάλλεται ένα αίτημα στον διακομιστή RBAC για να διαπιστωθεί αν ο χρήστης έχει δικαίωμα περιήγησης στην αγορά. Ο διακομιστής RBAC ανακτά το ρόλο του χρήστη από την αντιστοίχιση στο keycloak (ή εναλλακτικά οι αντιστοιχίσεις χρήστη-ρόλου μπορούν να αποθηκευτούν σε ένα JSON) και στη συνέχεια απαντά με "true" στην αγορά, εάν ο χρήστης έχει το σωστό ρόλο για περιήγηση.

Σχήμα 1. Η αγορά ζητά δικαιώματα από το διακομιστή RBAC

Ο διακομιστής RBAC ορίζει τέσσερις διαφορετικούς ρόλους:

  • Διαχειριστής
  • Εκδότης
  • Καταναλωτής
  • Χρήστης

Διαχειριστής / Εκδότης

Επί του παρόντος, τόσο οι χρήστες με τον ρόλο του διαχειριστή όσο και οι χρήστες με τον ρόλο του εκδότη θα μπορούν να χρησιμοποιούν την Αγορά χωρίς περιορισμούς. Μπορούν να δημοσιεύουν, να καταναλώνουν και να περιηγούνται σε σύνολα δεδομένων.

Καταναλωτής

Ένας χρήστης με το ρόλο του καταναλωτή μπορεί να περιηγηθεί σε σύνολα δεδομένων, να τα αγοράσει, να ανταλλάξει datatokens και να συνεισφέρει σε datapools. Ωστόσο, δεν είναι σε θέση να δημοσιεύει σύνολα δεδομένων. Εάν επισκεφθεί τη σελίδα δημοσίευσης, θα δει ένα σφάλμα που εξηγεί ότι δεν έχει την απαιτούμενη άδεια.

Σχήμα 2. Προβολή της αγοράς χωρίς την άδεια δημοσίευσης

Χρήστες

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

Σχήμα 3. Προβολή της αγοράς χωρίς την άδεια του καταναλωτή

Χρήστες χωρίς ρόλο

Εάν ένας χρήστης επιχειρήσει να δει την αγορά δεδομένων χωρίς ρόλο, δεν θα μπορέσει να δει ή να αναζητήσει κανένα από τα σύνολα δεδομένων.

Σχήμα 4. Προβολή της αγοράς χωρίς άδεια περιήγησης

Δεν υπάρχει συνδεδεμένο πορτοφόλι

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

Σχήμα 5. Σύνδεση πορτοφολιού

2.2 Αντιστοίχιση Χρηστών σε Ρόλους

Επί του παρόντος, υπάρχουν δύο τρόποι με τους οποίους ο διακομιστής RBAC μπορεί να ρυθμιστεί ώστε να αντιστοιχίζει ρόλους χρηστών σε διευθύνσεις Ethereum. Ο διακομιστής RBAC είναι επίσης κατασκευασμένος με τέτοιο τρόπο ώστε να μπορείτε εύκολα να προσθέσετε τη δική σας υπηρεσία εξουσιοδότησης. Οι δύο υπάρχουσες μέθοδοι είναι οι εξής:

  1. Keycloak
  2. JSON

Εάν εκτελείτε ήδη έναν διακομιστή διαχείρισης ταυτότητας και πρόσβασης Keycloack, μπορείτε να ρυθμίσετε τον διακομιστή RBAC ώστε να τον χρησιμοποιεί προσθέτοντας τη διεύθυνση URL του διακομιστή Keycloak στην περιβαλλοντική μεταβλητή KEYCLOAK_URL στο αρχείο RBAC .env.

Εναλλακτικά, αν δεν χρησιμοποιείτε ήδη το Keycloak, ο ευκολότερος τρόπος αντιστοίχισης ρόλων χρηστών σε διευθύνσεις ethereum είναι σε ένα αντικείμενο JSON που αποθηκεύεται ως περιβαλλοντική μεταβλητή JSON_DATA στο αρχείο RBAC .env. Υπάρχει ένα παράδειγμα της μορφής που απαιτείται για αυτό το αντικείμενο JSON στο αρχείο .example.env

Είναι πιθανό να μπορείτε να ρυθμίσετε και τις δύο αυτές μεθόδους αντιστοίχισης ρόλων χρηστών σε διευθύνσεις Ethereum. Σε αυτή την περίπτωση, τα αιτήματα προς τον RBAC διακομιστή σας θα πρέπει να προσδιορίζουν ποια υπηρεσία auth χρησιμοποιούν, π.χ. "authService": "json" ή "authService": "keycloak"

2.3 Προεπιλεγμένη υπηρεσία Εξουσιοδότησης

Επιπλέον, μπορείτε επίσης να ορίσετε μια περιβαλλοντική μεταβλητή εντός του διακομιστή RBAC που καθορίζει την προεπιλεγμένη μέθοδο εξουσιοδότησης που θα χρησιμοποιείται, π.χ. DEFAULT_AUTH_SERVICE = "json". Όταν καθορίζεται αυτή η μεταβλητή, οι αιτήσεις που αποστέλλονται στον διακομιστή RBAC δεν χρειάζεται να περιλαμβάνουν μια υπηρεσία authService και θα χρησιμοποιούν αυτόματα την προεπιλεγμένη μέθοδο εξουσιοδότησης.

2.4 Ανάπτυξη

Ο διακομιστής RBAC είναι μια express εφαρμογή node.js και πρέπει να αναπτυχθεί ειδικά για το έργο σας. Ο ευκολότερος τρόπος για να εγκαταστήσετε τον διακομιστή RBAC είναι μέσα σε ένα δοχείο docker, οδηγίες για την εγκατάσταση μπορείτε να βρείτε στο αποθετήριο του GitHub.

3. Δικαιώματα Επιπέδου Περιουσιακού Στοιχείου:

3.1 Περίγραμμα

Οι λίστες αποδοχής και άρνησης είναι προηγμένες λειτουργίες που επιτρέπουν στους εκδότες να ελέγχουν την πρόσβαση σε μεμονωμένα στοιχεία δεδομένων.

Οι εκδότες μπορούν να περιορίσουν τα περιουσιακά στοιχεία έτσι ώστε να έχουν πρόσβαση σε αυτά μόνο εγκεκριμένοι χρήστες (λίστες αποδοχής) ή μπορούν να περιορίσουν τα περιουσιακά στοιχεία έτσι ώστε να έχουν πρόσβαση σε αυτά όλοι εκτός από ορισμένους χρήστες (λίστες απόρριψης).

Η γενική ιδέα είναι να υπάρχουν λίστες "αποδοχής" και "απόρριψης" στο DDO ενός περιουσιακού στοιχείου, όπου κάθε εγγραφή είναι μια διεύθυνση Ethereum. Ο Πάροχος Ocean χρησιμοποιεί αυτές τις πληροφορίες για να αποφασίσει αν θα δώσει πρόσβαση.

Οι λίστες αποδοχής και απόρριψης δεν είναι ενεργοποιημένες από προεπιλογή στο Ocean Market. Πρέπει να επεξεργαστείτε τις περιβαλλοντικές μεταβλητές για να ενεργοποιήσετε αυτή τη λειτουργία στη δική σας διακλάδωση του Ocean Market. Για να ενεργοποιήσετε τις λίστες αποδοχής και απόρριψης προσθέστε την ακόλουθη περιβαλλοντική μεταβλητή στο αρχείο .env της διακλάδωσης του Ocean Market: GATSBY_ALLOW_ADVANCED_SETTINGS="true".

3.2 Ρυθμίσεις για Προχωρημένους

Μόλις ενεργοποιηθούν οι προηγμένες ρυθμίσεις, θα δείτε μια νέα ενότητα "Επεξεργασία προηγμένων ρυθμίσεων" στη σελίδα λεπτομερειών του περιουσιακού στοιχείου. Για να χρησιμοποιήσετε τις λίστες αποδοχής ή άρνησης, πρέπει να πλοηγηθείτε στο περιουσιακό στοιχείο δεδομένων σας και να κάνετε κλικ στην επιλογή "Ρυθμίσεις για Προχωρημένους".

Σχήμα 6. Ρυθμίσεις για Προχωρημένους

3.3 Προσθήκη διεύθυνσης στη λίστα αδειών

Για να προσθέσετε έναν χρήστη σε μια λίστα αποδοχής ή απόρριψης, πρέπει πρώτα να γνωρίζετε τη διεύθυνση Ethereum του. Στη συνέχεια, μπορείτε να εισαγάγετε τη διεύθυνση του χρήστη στην ενότητα εισαγωγής και να κάνετε κλικ στο κουμπί "ΠΡΟΣΘΗΚΗ".

Εικ. 7. Προσθήκη διεύθυνσης στη λίστα αδειών

3.4 Αφαίρεση ενός χρήστη από μια λίστα allow ή deny

Για να αφαιρέσετε έναν χρήστη από μια λίστα αποδοχής ή απόρριψης, μπορείτε να κάνετε κλικ στο σταυρό δίπλα στη διεύθυνση Ethereum του.

Εικ. 8. Αφαίρεση ενός χρήστη από μια λίστα allow ή deny

3.5 Υποβολή αλλαγών στις λίστες allow ή deny

Οποιεσδήποτε αλλαγές κάνετε στη σελίδα προηγμένων ρυθμίσεων πρέπει να υποβληθούν και να υπογραφούν σε μια συναλλαγή. Για να το κάνετε αυτό, κάντε πρώτα κλικ στο κουμπί "ΥΠΟΒΟΛΗ".

Εικ. 9. Υποβολή αλλαγών στις λίστες allow ή deny

3.6 Συναλλαγή Υπογραφής Metamask

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

Εικ. 10. Συναλλαγή Υπογραφής Metamask

Όταν ολοκληρωθεί η διαδικασία ενημέρωσης των λιστών allow ή deny, θα εμφανιστεί ένα μήνυμα επιτυχίας.

Εικ. 11. Επιτυχία ενημέρωσης της λίστας allow ή deny

4. Συμπέρασμα

Το Ocean είναι ένα εργαλείο για αποκεντρωμένο έλεγχο πρόσβασης. Η βασική του προσέγγιση είναι τα datatokens, όπου ένας καταναλωτής μπορεί να έχει πρόσβαση σε έναν πόρο για 1,0 datatokens.

Με βάση τα σχόλια των εταιρικών συνεργατών μας, έχουμε εισαγάγει λειτουργίες για πιο λεπτομερή δικαιώματα:

  1. Λεπτομερή δικαιώματα σε επίπεδο αγοράς για περιήγηση, δημοσίευση κ.λπ. σε ένα frontend αγοράς. Υλοποιείται μέσω ενός RBAC Server. Τα δικαιώματα ελέγχονται από τον φορέα εκμετάλλευσης της αγοράς.
  2. Λεπτομερή δικαιώματα σε επίπεδο περιουσιακού στοιχείου για την κατανάλωση του ίδιου του περιουσιακού στοιχείου. Καθορίζονται από τα πεδία "allow" και "deny" στο DDO. Τα δικαιώματα ελέγχονται από τον εκδότη.

Ευχαριστούμε όλους όσοι συνέβαλαν στη δημιουργία αυτού του άρθρου, και ειδικά την τεχνολογία που περιγράφει αυτό το άρθρο: ειδικά την ομάδα βασικού λογισμικού του Ocean και τους επιχειρηματικούς συνεργάτες μας που ήταν τόσο πολύτιμοι στη διαμόρφωση αυτού του χαρακτηριστικού.

Ακολουθήστε το Πρωτόκολλο Ocean στο Twitter, το Telegram, το LinkedIn, το Reddit, το GitHub και το Newsletter για ενημερώσεις και ανακοινώσεις του έργου. Και συνομιλήστε απευθείας με άλλους προγραμματιστές στο Discord.

Ευχαριστούμε τον Trent McConaghy και την ομάδα του Πρωτοκόλλου Ocean.

Πρωτότυπο Άρθρο (Αγγλική): Fine-Grained Permissions now supported in Ocean Protocol

Συντάκτης Πρωτότυπου Άρθρου: Jamie

Ημερομηνία Συγγραφής Πρωτότυπου Άρθρου: 22 Σεπτεμβρίου 2021