Architecture Decision Record

Active theme: Light

← Παραδείγματα καταγραφής αποφάσεων

Καταγραφή αρχιτεκτονικής απόφασης: επιλογές ταυτοποίησης και εξουσιοδότησης

Η ταυτοποίηση και η εξουσιοδότηση εφαρμογών ιστού είναι δύο κρίσιμες έννοιες για την ασφάλεια της πρόσβασης σε εφαρμογές και υπηρεσίες. Και οι δύο αφορούν την ταυτότητα των χρηστών και τον τρόπο παραχώρησης δικαιωμάτων, αλλά εστιάζουν σε διαφορετικές πτυχές:

  • Η Ταυτοποίηση (authentication) είναι η διαδικασία επαλήθευσης της ταυτότητας ενός χρήστη ή συστήματος.
  • Η Εξουσιοδότηση (authorization) είναι η διαδικασία προσδιορισμού των πόρων ή των ενεργειών στις οποίες έχει πρόσβαση ο ταυτοποιημένος χρήστης ή σύστημα.

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

1. OAuth (Open Authorization)

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

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

Το OAuth δεν χειρίζεται απευθείας την ταυτοποίηση· αφορά την παραχώρηση πρόσβασης. Για ταυτοποίηση, το OAuth συνδυάζεται συχνά με άλλα πρωτόκολλα, όπως το OpenID Connect.

2. OpenID Connect (OIDC)

Το OpenID Connect (OIDC) είναι ένα επίπεδο ταυτότητας χτισμένο πάνω στο OAuth 2.0 που προσθέτει ταυτοποίηση στις δυνατότητες εξουσιοδότησης του OAuth. Ουσιαστικά, το OpenID Connect επεκτείνει το OAuth ώστε να χειρίζεται την ταυτοποίηση χρηστών και παρέχει έναν τυποποιημένο τρόπο στις εφαρμογές να επαληθεύουν την ταυτότητα ενός χρήστη.

  • Ροή: Όταν ένας χρήστης συνδέεται μέσω OpenID Connect, η εφαρμογή τρίτου ζητά ένα διακριτικό ταυτότητας (ID token) (επιπλέον του διακριτικού πρόσβασης OAuth). Το διακριτικό ταυτότητας περιέχει πληροφορίες για τον χρήστη (όπως το όνομα χρήστη, το email και άλλους ισχυρισμούς). Έτσι η εφαρμογή γνωρίζει ποιος είναι ο χρήστης και αν είναι ταυτοποιημένος.
  • Παράδειγμα: Η σύνδεση σε μια υπηρεσία όπως το Slack με τον λογαριασμό σας Google (με το Google ως πάροχο OpenID Connect) περιλαμβάνει ταυτοποίηση μέσω OpenID Connect, ενώ το OAuth διαχειρίζεται την πρόσβαση στους πόρους σας στο Google.

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

3. SAML (Security Assertion Markup Language)

Το SAML είναι ένα παλαιότερο πρότυπο βασισμένο σε XML που χρησιμοποιείται για την ανταλλαγή δεδομένων ταυτοποίησης και εξουσιοδότησης μεταξύ μερών, ιδίως σε σενάρια ενιαίας σύνδεσης (Single Sign-On, SSO). Χρησιμοποιείται κυρίως σε εταιρικά περιβάλλοντα ώστε οι χρήστες να ταυτοποιούνται μία φορά και να έχουν πρόσβαση σε πολλές εφαρμογές χωρίς να ξαναπληκτρολογούν διαπιστευτήρια.

  • Ροή: Ο χρήστης ταυτοποιείται πρώτα σε έναν πάροχο ταυτότητας (IdP). Ο IdP δημιουργεί μια υπογεγραμμένη δήλωση SAML (assertion) που περιλαμβάνει την ταυτότητα του χρήστη και σχετικά χαρακτηριστικά. Η δήλωση αποστέλλεται στον πάροχο υπηρεσίας (SP), ο οποίος τη χρησιμοποιεί για να εξουσιοδοτήσει την πρόσβαση στην εφαρμογή.
  • Παράδειγμα: Ένας υπάλληλος συνδέεται στην εταιρική πύλη (IdP) και συνδέεται αυτόματα σε άλλα συστήματα όπως email, CRM κ.λπ., χωρίς να ξαναπληκτρολογήσει διαπιστευτήρια. Η διαδικασία ταυτοποίησης βασίζεται στη δήλωση SAML που στέλνει ο IdP.

Το SAML χρησιμοποιείται συχνά σε εταιρικές λύσεις SSO και λειτουργεί καλά για εφαρμογές ιστού σε εταιρικά περιβάλλοντα, αλλά είναι λιγότερο φιλικό προς τις κινητές συσκευές σε σύγκριση με το OAuth/OIDC.

4. WS-Federation (Web Services Federation)

Το WS-Federation είναι ένα ακόμη πρωτόκολλο που χρησιμοποιείται για ενιαία σύνδεση (SSO), ιδίως σε εταιρικά περιβάλλοντα βασισμένα στη Microsoft. Αποτελεί μέρος της οικογένειας προδιαγραφών WS- (Web Services)* και επιτρέπει ομοσπονδία ταυτοτήτων μεταξύ διαφορετικών τομέων ασφαλείας (όπως μεταξύ διαφορετικών οργανισμών ή μεταξύ διαφορετικών υπηρεσιών).

  • Ροή: Το WS-Federation επιτρέπει σε έναν αξιόπιστο πάροχο ταυτότητας (IdP) να ταυτοποιεί χρήστες και να εκδίδει διακριτικά που ο πάροχος υπηρεσίας μπορεί να χρησιμοποιήσει για εξουσιοδότηση. Μοιάζει με το SAML, αλλά χρησιμοποιείται συχνά σε σενάρια που βασίζονται σε μεγάλο βαθμό σε τεχνολογίες Microsoft.
  • Παράδειγμα: Ένας χρήστης συνδέεται σε μια εταιρική εφαρμογή που φιλοξενείται από το Microsoft Azure Active Directory (AD) και η ταυτότητά του μπορεί να χρησιμοποιηθεί για πρόσβαση σε άλλες ομόσπονδες υπηρεσίες, συμπεριλαμβανομένων εφαρμογών που φιλοξενούνται από τρίτους προμηθευτές.

Παρότι το WS-Federation έχει αντικατασταθεί σε μεγάλο βαθμό από νεότερα πρωτόκολλα όπως το OAuth 2.0 και το OpenID Connect σε πολλά σύγχρονα περιβάλλοντα ιστού, εξακολουθεί να χρησιμοποιείται σε συστήματα παλαιού τύπου, ιδίως σε επιχειρήσεις με επίκεντρο τη Microsoft.

5. LDAP (Lightweight Directory Access Protocol)

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

  • Ταυτοποίηση: Το LDAP επιτρέπει σε μια εφαρμογή να ταυτοποιεί χρήστες ερωτώντας την υπηρεσία καταλόγου για διαπιστευτήρια (όπως κωδικούς πρόσβασης).
  • Εξουσιοδότηση: Διαχειρίζεται επίσης ρόλους και δικαιώματα χρηστών, βοηθώντας να καθοριστεί αν ένας χρήστης έχει πρόσβαση σε ορισμένους πόρους.
  • Παράδειγμα: Πολλές επιχειρήσεις χρησιμοποιούν καταλόγους βασισμένους σε LDAP (π.χ. Active Directory) για ταυτοποίηση και εξουσιοδότηση, ιδίως σε περιβάλλοντα Windows.

Το LDAP είναι κρίσιμο για τις επιχειρήσεις στη διαχείριση της πρόσβασης χρηστών σε εσωτερικά συστήματα, αλλά σε σύγχρονο πλαίσιο ιστού το LDAP ενσωματώνεται συχνά με άλλα πρωτόκολλα όπως το SAML ή το OAuth για πληρέστερη διαχείριση ταυτότητας.

6. Πάροχοι κοινωνικού SSO

Οι πάροχοι κοινωνικής ενιαίας σύνδεσης (SSO) όπως το Facebook, το Google, το Twitter, το GitHub και άλλοι επιτρέπουν στους χρήστες να ταυτοποιούνται σε εφαρμογές τρίτων χρησιμοποιώντας τα διαπιστευτήριά τους από τα μέσα κοινωνικής δικτύωσης. Είναι ένας τύπος ταυτοποίησης βασισμένης σε OAuth όπου η υπηρεσία τρίτου (π.χ. το Google) είναι ο πάροχος ταυτότητας.

  • Ροή: Ο χρήστης πατά «Σύνδεση με Google» (για παράδειγμα). Η εφαρμογή ανακατευθύνει στο Google, όπου ο χρήστης συνδέεται (αν δεν είναι ήδη συνδεδεμένος). Το Google στη συνέχεια παρέχει ένα διακριτικό πρόσβασης ή διακριτικό ταυτότητας στην εφαρμογή τρίτου, το οποίο μπορεί να χρησιμοποιηθεί για την ταυτοποίηση του χρήστη και πιθανώς για πρόσβαση στα δεδομένα του.
  • Παράδειγμα: Πολλές εφαρμογές σάς επιτρέπουν να συνδεθείτε χρησιμοποιώντας τα διαπιστευτήριά σας Google ή Facebook. Η εφαρμογή θα χρησιμοποιήσει OAuth ή OpenID Connect στο παρασκήνιο για να επαληθεύσει την ταυτότητά σας και, σε ορισμένες περιπτώσεις, να αποκτήσει πρόσβαση σε ορισμένα δεδομένα κοινωνικών μέσων.

Το κοινωνικό SSO είναι μια βολική και ευρέως υιοθετημένη μέθοδος ταυτοποίησης, επειδή μειώνει την τριβή για τους χρήστες, που ίσως δεν θέλουν να δημιουργήσουν ακόμη ένα όνομα χρήστη και κωδικό πρόσβασης.


Περίληψη των διαφορών:

  • OAuth: Χρησιμοποιείται για εξουσιοδότηση, επιτρέπει σε εφαρμογές τρίτων να έχουν πρόσβαση σε δεδομένα του χρήστη χωρίς να εκθέτουν διαπιστευτήρια.
  • OpenID Connect: Επεκτείνει το OAuth ώστε να παρέχει ταυτοποίηση, επιτρέποντας στις εφαρμογές να επαληθεύουν την ταυτότητα του χρήστη.
  • SAML: Πρωτόκολλο βασισμένο σε XML που χρησιμοποιείται για SSO, συχνά σε εταιρικά περιβάλλοντα.
  • WS-Federation: Ένα πρωτόκολλο ειδικό της Microsoft για ομοσπονδία ταυτοτήτων, που χρησιμοποιείται σε συστήματα παλαιού τύπου.
  • LDAP: Ένα πρωτόκολλο για ερωτήματα σε υπηρεσίες καταλόγου με σκοπό την ταυτοποίηση χρηστών και τη διαχείριση εξουσιοδότησης.
  • Πάροχοι κοινωνικού SSO: Συστήματα βασισμένα σε OAuth (όπως Google, Facebook) που επιτρέπουν σε εφαρμογές τρίτων να ταυτοποιούν χρήστες χρησιμοποιώντας τα διαπιστευτήριά τους από τα μέσα κοινωνικής δικτύωσης.

Κάθε μία από αυτές τις τεχνολογίες έχει τα δικά της δυνατά σημεία και περιπτώσεις χρήσης, και στις σύγχρονες εφαρμογές μπορεί να δείτε συνδυασμό τους για διαφορετικές πτυχές της ασφάλειας (π.χ. OAuth/OIDC για πρόσβαση σε API, SAML για εταιρικό SSO).