Εξουσιοδότηση OAuth 2.0

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

Ιστορικό

Φανταστείτε ότι θέλετε να χρησιμοποιήσετε μια εφαρμογή τρίτου που χρειάζεται πρόσβαση σε δεδομένα από τον λογαριασμό Google σας. Δεν θα θέλατε να δώσετε σε αυτή την εφαρμογή τρίτου το όνομα χρήστη και τον κωδικό πρόσβασης Google σας, σωστά; Εδώ μπαίνει το OAuth. Σας επιτρέπει να χορηγήσετε σε αυτή την εφαρμογή πρόσβαση στα δεδομένα Google σας χωρίς να μοιραστείτε τα διαπιστευτήρια Google σας.

OAuth 2.0 using LoadFocus

Βασικές Αρχές του OAuth 2.0

Το OAuth 2.0 εστιάζει στην απλότητα για τον προγραμματιστή-πελάτη, παρέχοντας ταυτόχρονα συγκεκριμένες ροές εξουσιοδότησης για διαδικτυακές εφαρμογές, εφαρμογές desktop, κινητά τηλέφωνα και συσκευές σαλονιού. Ακολουθεί μια απλοποιημένη ανάλυση:

  • Resource Owner: Ο χρήστης που εξουσιοδοτεί μια εφαρμογή να αποκτήσει πρόσβαση στον λογαριασμό του. Η πρόσβαση της εφαρμογής στον λογαριασμό του χρήστη περιορίζεται στο "scope" της χορηγηθείσας εξουσιοδότησης (π.χ., ανάγνωση ή εγγραφή συγκεκριμένου τύπου δεδομένων).

  • Client: Η εφαρμογή που θέλει να αποκτήσει πρόσβαση στον λογαριασμό του χρήστη. Πριν μπορέσει να το κάνει, πρέπει να εξουσιοδοτηθεί από τον χρήστη και η εξουσιοδότηση πρέπει να επικυρωθεί από το API.

  • Resource Server: Ο διακομιστής που φιλοξενεί τους λογαριασμούς χρηστών. Μπορεί να αποδεχτεί και να ανταποκριθεί σε αιτήματα προστατευμένων πόρων χρησιμοποιώντας access tokens.

  • Authorization Server: Αυτός ο διακομιστής επαληθεύει την ταυτότητα του χρήστη και στη συνέχεια εκδίδει access tokens στην εφαρμογή.

Ροές OAuth 2.0

Υπάρχουν πολλές "ροές" ή "τύποι χορήγησης" για διαφορετικούς τύπους εφαρμογών και περιπτώσεις χρήσης:

  • Authorization Code (για εφαρμογές που εκτελούνται σε web server): Αυτή είναι η πιο συνηθισμένη ροή, ειδικά για web εφαρμογές. Περιλαμβάνει ανακατεύθυνση του χρήστη στην υπηρεσία, όπου συνδέεται. Μετά τη σύνδεση, ανακατευθύνεται πίσω στην εφαρμογή με έναν κωδικό εξουσιοδότησης, τον οποίο η εφαρμογή μπορεί να ανταλλάξει με access token.

  • Implicit (για εφαρμογές που εκτελούνται σε πρόγραμμα περιήγησης): Αυτή η ροή είναι για εφαρμογές βασισμένες σε user-agent (π.χ., single-page apps) όπου το access token επιστρέφεται αμέσως χωρίς επιπλέον βήμα ανταλλαγής κωδικού εξουσιοδότησης.

  • Resource Owner Password Credentials: Αυτή η ροή επιτρέπει στην εφαρμογή να παρέχει απευθείας το όνομα χρήστη και τον κωδικό πρόσβασης του χρήστη. Συνιστάται μόνο για αξιόπιστες εφαρμογές, καθώς περιλαμβάνει κοινοποίηση των διαπιστευτηρίων του χρήστη.

  • Client Credentials: Χρησιμοποιείται όταν ο ίδιος ο πελάτης είναι ο ιδιοκτήτης του πόρου, για παράδειγμα, όταν ο πελάτης είναι μια υπηρεσία παρασκηνίου.

Tokens

Αντί να χρησιμοποιεί τα διαπιστευτήρια του χρήστη, το OAuth 2.0 χρησιμοποιεί tokens. Υπάρχουν δύο τύποι:

  • Access Token: Επιτρέπει στην εφαρμογή να κάνει αιτήματα API εκ μέρους του χρήστη. Είναι βραχύβιο.

  • Refresh Token: Μπορεί να χρησιμοποιηθεί για τη λήψη νέου access token αν το αρχικό access token έχει λήξει. Έχει μεγαλύτερη διάρκεια ζωής από ένα access token.

Ασφάλεια

Το OAuth 2.0 βασίζεται στο SSL/TLS για ασφάλεια. Εξασφαλίζει εμπιστευτικότητα δεδομένων μεταξύ του πελάτη, του διακομιστή εξουσιοδότησης και του διακομιστή πόρων. Ακόμα κι αν οι επιτιθέμενοι καταφέρουν να υποκλέψουν ένα access token, δεν μπορούν να το χρησιμοποιήσουν πέρα από τη λήξη του (συνήθως σύντομη διάρκεια) ή εκτός του εύρους για το οποίο εκδόθηκε.

Συμπέρασμα

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