Newsgroup: it.comp.www.php
Titolo: OpenID + OAuth: esperienze?

Ho la necessità di far dialogare almeno 3-4 applicativi standalone
(php) tra loro, condividendo alcuni dati.
 
Il primo step è centralizzare le autenticazioni e l'ho fatto con
OpenID ed una cariola di bestemmie.
Però, ci son riuscito.
 
In questo modo tutte e 4 le applicazioni fanno il login usando i dati
presenti su un server esterno openid di mia gestione.
 
Ora devo trovare il modo di condividere i dati delle 4 applicazioni,
pensavo con oauth, ma non so come fare. Avete esperiente?
 
Se non erro anche google, in determinati servizi, prima di farti
accedere chiede l'associazione e la condivisione di più dati, o
sbagio? Mi pare che per accedere su youtube sia necessario associare
un account google ad un account youtube.

 pensavo con oauth, ma non so come fare. Avete esperiente?
 
Un semplicissimo web service in REST no?
L'utente accede al primo dominio (applicativo) e decide se esportare o 
meno quei dati, l'altro dominio inoltra una chiamata REST, si effettua 
un controllo sul db, se l'utente ha dato l'OK si esporta altrimenti niet!


 un controllo sul db, se l'utente ha dato l'OK si esporta altrimenti niet!
 
Devo quindi fare 4 web service, uno per ciascuna applicazione
ed interfacciarli in tutti e 4. Inoltre, nel caso arrivasse una
quinta applicazione non gestita da me, dovrei rilasciare una
documentazione del webservice al cliente e reinterfacciare le
altre 4 applicazioni.
 
Preferivo uno standard, piuttosto che reinventare la ruota.
 
-- 
Tu non puoi passare!
Sono un servitore del fuoco segreto e reggo la fiamma di Anor!
Il fuoco oscuro non ti servirà a nulla, fiamma di Udur!
Ritorna nell'ombra! TU NON PUOI PASSARE!

 altre 4 applicazioni.
 
Che sono 4 righe di php che gestiscono una query..
 
comincerei da RESTful
 
http://programmazione.html.it/guide/lezione/5239/i-principi-dellarchitettura-restful/
 


 
http://programmazione.html.it/guide/lezione/5239/i-principi-dellarchitettura-restful/
 
 
Conosco perfettamente RESTFul. Non fa al mio caso, perchè come ho
scritto dovrei fare una implementazione ad-hoc per ciascun applicativo
(ora son solo 4 ma aumenteranno), dovrei fare una documentazione ad-hoc
per ogni utente che si dovrà interfacciare al mio software etc etc etc.
 
Il che significa che se in futuro avessi 15 clienti con software
home-made, dovrei istruire 15 utenti per usare una mia piattaforma
quando magari basta dargli il link alla documentazione di uno
standard già esistente.
 
Tornando IT, come si può fare ad usare OAuth (che credo sia
adatto allo scopo) per centralizzare le autenticazioni?
Se ci fosse un server centrale, non ci sarebbe problema, le varie
applicazioni si dovrebbero collegare solo al server centrale.
 
Ma nel mio caso ho la necessità di far dialogare le persone, si può
usare oauth come una sorta di 'director'? Ad esempio:
 
applicazione1 che deve dialogare con applicazione2.
fa il login su un server di autenticazione usando oauth, il quale
autorizza l'accesso per conto di applicazione2.
 
In questo modo, le singole applicazioni dovrebbero dialogare solo
verso il server di autenticazione e mai tra di loro.


 verso il server di autenticazione e mai tra di loro.
 
Per il login ma per i dati dovranno pur dialogare tra loro in qualche 
modo o no?
 
 
 

 modo o no?
 
Si, a meno che non sia il server di autenticazione a fare una sorta di
relay.

accounting.
 
L'utente si collega ad UN server (chiamiamolo 
server1.mydomain.com
), a più
server dello stesso dominio, o a più server su domini diversi? Al netto di
OAuth, s'intende.
 
Nei primi due casi puoi fare un login e poi salvare un cookie di dominio e
legarlo alla sessione client side.
 
Nel cookie ci scrivi TS:USER:SHA1(secret,ts,user)
 
e 'secret' e' condiviso fra tutti i server. Verifichi che TS non sia oltre
il time-to-live che imposterai. Se vuoi essere pignolo (e rischiare) oltre
a user ci aggiungi :$_SERVER['REMOTE_ADDR'].
 
Login:	OAuth -> il server di login si collega a, e.g. Google -> verifica
	-> imposta cookie valido per .
mydomain.com
 
 
Tutti gli altri server ricevono il cookie e sono contenti
 
Nel caso di server su domini diversi, forse puoi usare un 'passacarte' via
jQuery per trasbordare il cookie. Occhio che questo e' concettualmente fin
troppo simile ad un XSS attack, per cui alcuni browser potrebbero farti un
tot di storie.
 
Oppure puoi usare un link 'mallevadore', ossia su server1 dove avrai fatto
il login c'e' il link a server2 come ...?auth=COOKIE . server2 lo riceve e
crea una propria sessione con lo stesso auth. Si può fare indirettamente e
anche via jQuery (cioe' il link è un JS che fa una POST, così nell'URL non
vedi niente).
 
Leonardo
 
-- 
Tell us whether you spy, in the light of the morn,
what saluted was fiercely at the fall of the past day:
whose pips and whose bands in the very heart of the fray
bravely floated from the bulwarks to which we were sworn?

 vedi niente).
 
Ere esattamente ciò che cercavo di evitare.
Ho già un sistema del genere e vorrei dismetterlo. Attualmente
garantisco la
login mediante un passpartout cifrato in AES del tipo:
 
username:chiave_segreta:timestamp:remote_addr
 
la stringona cifrata, in base64 viene passata come parametro GET ed il
server
che riceve la decritta, verifica la chiave inserita nella stringa,
verifica
il timestamp ed il remote_addr. Se tutto combacia forza
l'autenticazione ad
utente (indicato nella stringa) bypassando la richiesta di password.
 
E' una porcata.
 
Pensavo di risolvere con oauth o con altri standard.

Pensavo di risolvere con oauth o con altri standard.
 
Se "Andando da Server1.com a Server2.com mi chiede di nuovo user e pass,
che per altro sono sempre gli stessi" e' accettabile, si', con OAuth hai
risolto.
 
Ma OAuth non fa le magie :-)


 risolto.
 
Si, sarebbe accettabile, anche perchè al cliente basterebbe fare un
singolo click, visto che l'autenticazione sul server auth l'ha già fatta
tramite openid.
 
Al momento io ho provato con 3 server, di cui uno di autenticazione.
Il cliente accede a server1, vede un bottone per accedere e lo clicca.
Viene inviato, tramite openid, sul server di autenticazione il quale
gli chiede user/pass e la conferma di associazione al server1.
Fatto ciò, torna loggato su server1.
Poi passa su server2, vede lo stesso bottone, lo clicca e torna sul
mio server openid (già loggato, visto che l'ha fatto 5 minuti prima)
il quale gli chiede: vuoi associarti a server2? Da conferma e torna
su server2. Da quel momento resta loggato in entrambi.
Questo è accettabile, ed è così che funziona openid (o anche google)
 
Ora, da quel che ho capito, oauth serve a consentire l'accesso a
determinate informazioni, quindi pensavo potesse tornare utile a far
si che da server2 il cliente oltre a confermare la propria identità
potesse confermare l'accesso a parte dei dati presenti su server1.


potesse confermare l'accesso a parte dei dati presenti su server1.
 
Hmmmm... non credo, nel senso, lo puoi fare, certo, ma la conferma deve
essere disponibile sul server di OAuth, non su server2 o server1. Cioe'
devi mettere su un server OAuth tuo che preveda quello fra le opzioni.


 devi mettere su un server OAuth tuo che preveda quello fra le opzioni.
 
Eh, appunto, non saprei da dove cominciare.
Intanto mi basta sapere della sua fattibilità, almeno non perdo 15 anni
a cercare di far cose impossibili.


> un account google ad un account youtube.
 
E' possibile ma non e' vincolante.