Ultimamente mi sono imbattuto in un piccolo progetto con Java. Per il momento non vi anticipo lo scopo del progetto, che spero di pubblicare il prima possibile su questo blog, ma grazie a questo sto studiando parecchi aspetti della programmazione web oriented, dell’integrazione con i social network e delle metodologie del futuro.
Tutti questi studi e tutte le mie scoperte le condividerò ovviamente con tutti voi in un insieme di articoli che pubblicherò su questo blog. In questo primo articolo della serie vi parlerò di come funziona l’autenticazione tra una Applicazione ed un Sistema Esterno utilizzando OAuth!
OAuth è un protocollo open che permette ad Applicazioni Web o Desktop di chiamare in modo sicuro ed autorizzato API messe a disposizione da un Sistema Esterno in modo semplice e standard. Questo protocollo risulta essere molto efficace in chiamate conformi alla metodologia RESTful, quindi facilmente applicabile a tutte quelle applicazioni scritte in linguaggi capaci di aprire una Socket.
Il protocollo OAuth ha essenzialmente due principi. Li riporto dal sito ufficiale:
OAuth is a simple way to publish and interact with protected data. It’s also a safer and more secure way for people to give you access. We’ve kept it simple to save you time.
If you’re storing protected data on your users’ behalf, they shouldn’t be spreading their passwords around the web to get access to it. Use OAuth to give your users access to their data while protecting their account credentials.
In poche parole, quello che OAuth vuole dirci è che quando una Applicazione vuole utilizzare i dati di un Utente salvati in un Sistema Esterno, questa non deve venire in possesso dei dati di accesso dell’Utente verso il Sistema Esterno, ma l’Utente deve autorizzare in modo esplicito il Sistema Esterno a fornire i dati all’Applicazione.
Il ragionamento sembra essere molto contorto, ma basta guardarsi in giro su Internet per vedere come questo concetto sia all’ordine del giorno:
- Dobbiamo esplicitamente dire al Facebook che autorizziamo una data Applicazione prima di vederla sul nostro profilo;
- Dobbiamo esplicitamente dire a Twitter che autorizziamo una data Applicazione ad aggiornare il nostro stato;
- Dobbiamo esplicitamente dire a Yahoo o Google che autorizziamo una data Applicazione a recuperare i nostri dati;
- ecc…
Come potete rendervi subito conto, tutte le Applicazioni che ho menzionato riescono ad avere un accesso ai dati dell’Utente di un determinato Sistema Esterno (Facebook, Twitter, Yahoo, Google, ecc…) senza che queste conoscano in modo diretto la login e la password dell’Utente stesso e garantendo a questo un livello di privacy molto elevato!
Sorpresi?
Questa autorizzazione avviene ovviamente in piena conformità con la filosofia RESTful, ovvero utilizzando l’header HTTP, in particolare il campo Authorization.
I passi che vengono effettuati nel processo di autorizzazione sono i seguenti:
- In modo preliminare, lo sviluppatore dell’Applicazione deve registrare quest’ultima sul Servizio Esterno, indicando quali dati potranno essere recuperati;
- L’Utente accede all’Applicazione che contatta il Servizio Esterno per ricevere un “Unauthorized Request Token”;
- L’Applicazione ridirige l’Utente verso il Sistema Esterno, passando il token non autorizzato;
- L’Utente decide di autorizzare l’Applicazione direttamente sul Sistema Esterno;
- Il Sistema Esterno ridirige l’Utente verso l’Applicazione passando un “Access Token”;
- L’Applicazione accede ai dati dell’Utente presenti sul Sistema Esterno grazie al token autorizzato.
Se volete approfondire il protocollo vi consiglio essenzialmente due link: le specifiche ufficiali del protocollo ed una spiegazione come Google usa OAuth.