Προγραμματισμός

GNAP: OAuth την επόμενη γενιά

Το έτος ήταν το 2012 και ένα αναθεωρημένο πρωτόκολλο ασφαλείας που ονομάζεται OAuth 2 σάρωσε τον ιστό, επιτρέποντας στους χρήστες να χρησιμοποιούν παρόχους ασφαλείας για εύκολη σύνδεση σε ιστότοπους. Πολλά συστήματα μεμονωμένης σύνδεσης, από το Cognito της AWS έως το Okta, εφαρμόζουν το OAuth. Το OAuth είναι αυτό που σας επιτρέπει να "κάνετε έλεγχο ταυτότητας με την Google" ή άλλους παρόχους σε έναν εντελώς διαφορετικό ιστότοπο ή εφαρμογή.

Λειτουργεί σαν ένα φεστιβάλ μπύρας. Πηγαίνετε σε ένα γραφείο και επικυρώνετε με το αναγνωριστικό σας (και κάποια χρήματα) και σας δίνουν μάρκες. Από εκεί, πηγαίνετε σε κάθε σκηνή μπύρας και ανταλλάσσετε ένα κουπόνι για μια μπύρα. Η μεμονωμένη ζυθοποιία δεν χρειάζεται να ελέγξει την ταυτότητά σας ή να ρωτήσει εάν πληρώσατε. Απλώς παίρνουν το κουπόνι και σας δίνουν μια μπύρα. Το OAuth λειτουργεί με τον ίδιο τρόπο, αλλά με ιστότοπους αντί για μπύρες.

Δυστυχώς, το OAuth είναι το καλύτερο φεστιβάλ μπύρας που έχει να προσφέρει το 2020.

Μίλησα με τον Dan Moore από το FusionAuth για το OAuth και μια προτεινόμενη αντικατάσταση που ονομάζεται GNAP - η οποία πιθανώς προφέρεται χωρίς το G ως "υπνάκο". Η προφορά ενισχύει την ιδέα ότι η ασφάλεια είναι ένα πραγματικά συναρπαστικό πεδίο. Το GNAP αντιμετωπίζει ορισμένους περιορισμούς του OAuth και το καρυκεύει με νέες δυνατότητες.

Γιατί να αντικαταστήσετε, ή μάλλον να αυξήσετε, το OAuth; Το OAuth σχεδιάστηκε γύρω από προγράμματα περιήγησης. Υποθέτει ότι ο δημιουργός που υποβάλλει το αίτημα μπορεί να χειριστεί μια ανακατεύθυνση HTTP. Αυτή η εστίαση στο πρόγραμμα περιήγησης ιστού αποτελεί εμπόδιο για εφαρμογές για κινητά ή οποιοδήποτε είδος "πράγμα" στο "Διαδίκτυο των πραγμάτων". Επιπλέον, τα μέρη του OAuth όπως είναι το 2007 και απαιτούν να δημοσιεύσετε παραμέτρους φόρμας αντί για JSON.

Η προδιαγραφή OAuth ήταν ασαφής σε ορισμένα μέρη και ο κόσμος άλλαξε από το 2012. Υπάρχει μια σειρά από RFC και BCP, ουσιαστικά πρόσθετα χαρακτηριστικά που πρέπει να εφαρμόσετε για περισσότερες δυνατότητες, καλύτερη ασφάλεια και γενική συμβατότητα. Μια ξεχωριστή προσπάθεια που ονομάζεται OAuth 2.1 ελπίζει να καταρρεύσει μερικά από αυτά τα πρόσθετα σε μια πιο συνεκτική ενιαία προδιαγραφή. Για μερικά από τα κίνητρα για το OAuth 2.1, δείτε τον Lee McGovern από τη δημοσίευση της Okta «Πόσα RFCs χρειάζεται για να αλλάξετε μια λάμπα». Το OAuth 2.1, σε αντίθεση με το GNAP, είναι απλώς μια σταδιακή κυκλοφορία χωρίς νέες σημαντικές αλλαγές εκτός από το συνδυασμό της στοίβας των προδιαγραφών σε μία μόνο προδιαγραφή.

Η προδιαγραφή GNAP βρίσκεται ακόμη στα αρχικά της στάδια. Οι συγγραφείς του GNAP σκοπεύουν να προχωρήσουν περισσότερο από το OAuth 2.1 και να αλλάξουν τη φύση του ίδιου του πρωτοκόλλου. Αντί να χρησιμοποιήσετε παραμέτρους HTTP, μπορείτε να χρησιμοποιήσετε το JSON. Τα τελικά σημεία της εφαρμογής είναι ανιχνεύσιμα. Δεν χρειάζεται να υποστηρίζετε ανακατευθύνσεις (ή τις διάφορες παραβιάσεις γύρω από αυτό). Ο Moore αναφέρεται σε αυτές τις αλλαγές με τον ευχάριστο όρο, «εργονομία προγραμματιστή».

Ένας βασικός στόχος του GNAP είναι ο διαχωρισμός του ποιος ζητά τους πόρους (RQ) και ποιος κατέχει τους πόρους (RO).

IETF

Το GNAP προτείνει επίσης την υποστήριξη νέων λειτουργιών ασφαλείας όπως:

  • Εκκίνηση διεύθυνσης ασύγχρονης εφαρμογής και εφαρμογής. Αυτές είναι διαφορετικές διαδρομές ελέγχου ταυτότητας που επιτρέπουν στον πελάτη να πραγματοποιήσει έλεγχο ταυτότητας χωρίς ανακατεύθυνση. Το GNAP επιτρέπει επίσης στις εφαρμογές να πραγματοποιούν έλεγχο ταυτότητας σε πόρους τρίτων στους οποίους ο διακομιστής πόρων και ο διακομιστής εξουσιοδότησης δεν έχουν άμεση πρόσβαση.
  • Ζητήστε συνέχιση. Αυτά επιτρέπουν στους πελάτες να διαπραγματεύονται πράγματα όπως ανακατευθύνσεις ή άλλες λεπτομέρειες ελέγχου ταυτότητας κατά τη διαδικασία ελέγχου ταυτότητας. Επιτρέπουν επίσης σε έναν πελάτη να διαπραγματευτεί για πρόσθετα προνόμια ή διακριτικά πρόσβασης.
  • Διακριτικά πολλαπλής πρόσβασης. Αυτά επιτρέπουν στους πελάτες να κάνουν έλεγχο ταυτότητας σε πολλούς πόρους ταυτόχρονα, για παράδειγμα, τόσο ως χρήστης όσο και ως διαχειριστής.
  • Διακριτικά περιορισμού αποστολέα. Ενώ υπάρχουν πρόσθετα στο OAuth 2 για αυτήν τη λειτουργικότητα που ονομάζεται DPOP και MTLS, το GNAP θα το ενσωματώσει απευθείας στο πρωτόκολλο. Επιστρέψτε στο παράδειγμα της σκηνής μπύρας. Τι θα συμβεί αν έπρεπε επίσης να ψιθυρίσουμε έναν κωδικό πρόσβασης στο αυτί του πωλητή, ενώ του δώσαμε το διακριτικό; Εάν το διακριτικό μας απορριφθεί (ή υποκλαπεί), δεν θα είχε σημασία γιατί ο φορέας δεν θα είχε τον κωδικό πρόσβασης.
  • Και το GNAP κάνει το φάντασμα του Kerberos να φωνάζει.

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

Σύμφωνα με τον Moore, οι συγγραφείς σκοπεύουν να κυκλοφορήσουν το GNAP το 2022. Δεδομένου ότι κάθε μέρα το 2020 είναι σαν μια εβδομάδα σε ένα τυπικό έτος, το GNAP απέχει πολύ. Ωστόσο, η ομάδα εργασίας του GNAP αναζητά συνεργάτες και μπορείτε να εγγραφείτε στη λίστα αλληλογραφίας και να προσφέρετε τα σχόλιά σας και την εμπειρία σας. Υποθέτω ότι δεν μπορείτε να διορθώσετε τα πάντα στον κόσμο, αλλά τουλάχιστον μπορείτε να βοηθήσετε να διορθώσετε το OAuth.