The King is dead! RIP 2006-2012

Ένα μεγάλο ευχαριστώ σε όλη την παρέα
Περισσότερα στο lexx.gr

Εισαγωγή στο OAuth

13 Mar 2010 by PanosJee

Εδώ και λίγο καιρό ασχολούμαι με το πρωτοκόλλο OAuth. Με λίγα λόγια θα χαρακτηρίζαμε το OAuth σαν το OpenID των apis. Να το θέσω με πιο απλά λόγια, ας αναλύσουμε τι σημαίνει OAuth = Open Authentication. Το OAuth είναι ένα ανοιχτό πρωτόκολλο επικοινωνίας μεταξύ εφαρμογών. Όπως καταλαβαίνετε το ένα άκρο θα είναι μια διαδυκτιακή υπηρεσία ενώ στο άλλο άκρο μπορεί να βρίσκεται μια άλλη διαδικτυιακή εφαρμογή, κινητή ή desktop.

Το OAuth ξεκίνησε στο Flickr ως ένα πρότυπο με το οποίο 3rd party εφαρμογές θα μπορέσουν να συνδεθούν ασφαλώς ή με άλλα λόγια να τις εξουσιοδοτήσει ο χρήστης να έχουν πρόσβαση στο Flickr λογαριασμό του χωρίς όμως ποτέ να δώσει στην εφαρμογή τα credentials που έχει στο Flickr. Μπορεί να έχετε δει πολλές Twitter εφαρμογές  (δε μιλάω για clients) που ζητάνε τα twitter credentials για να κάνουν πχ twitter εκ μέρους σας. Μόλις όμως δώσατε το password σας σε κάποιον τρίτο! Πολλή κακή πρακτική! Αλλες εφαρμογές όμως σας κατευθήνουν στο twitter όπου σας γίνεται η ερώτηση "H X εραφμογή θέλει να συνδεθεί με το twitter σας. Την εξουσιοδοτείτε;".

Όπως καταλαβαίνετε το επίπεδο ασφάλειας αυξάνεται και ανά πάσα στιγμή μέσω από το twitter μπορείτε να άρετε την εξουδιοδότηση. Για να δούμε όμως λίγες περισσότερες λεπτομέρειες για το πως γίνεται αυτή η εξουσιοδότηση.

  • Αρχικά θα πρέπει να κάνετε ένα registration την εφαρμογή για την εκάστωτε υπηρεσία. Πχ https://www.google.com/accounts/ManageDomains όταν θέλετε να πάρε τα Google Contacts ενός χρήστη
  • Η υπηρεσία θα δημιουργήσει ένα consumer key και ένα secret key με τα οποία θα υπογράφετε τα requests σας προς την υπηρεσία

Ας δούμε τώρα τη συνέχεια με λίγο κώδικα Python

Συνδεόμαστε στο LinkedIn με τα credentials που πήραμε στο προηγούμενο βήμα

li = LinkedIn(LINKEDIN_API_KEY, LINKEDIN_SECRET_KEY)

Αν έχουμε επιστρέψει από το LinkedIn (post auth)

if request.vars.oauth_verifier: # Αντάλλαξε το αποθηκευμένο request token του χρήστη με το access token που μας στάλθηκε access_token = li.getAccessToken(token=session.request_token, verifier=request.vars.oauth_verifier) # Κάνε API call profile = li.profile_api.getMyProfile(access_token)) else: # Δημιούργησε ένα Request Token και αποθήκευσετε προσωρινά (ΠΟΛΥ ΣΗΜΑΝΤΙΚΟ) session.request_token = li.getRequestToken(return_url) # Το url από όπου θα γίνει η εξουσιοδότηση li_authorize_url = li.getAuthorizeUrl(session.request_token)

Σας προτείνω να διαβάσετε την παρουσίαση του OAuth από το LinkedIn για καλύτερη κατανόηση.