2010-04-21 13 views
16

Sto cercando di implementare l'accesso OpenId per un'applicazione web. Ogni volta che un nuovo utente accede tramite OpenId, creo un nuovo utente su sustem e, tra i dati, memorizzo il loro URL openid, in modo che la prossima volta accedano con quell'utente.Perché l'ID dell'implementazione OpenID di Google cambia?

sto testando questo con il mio Gmail OpenID, e il problema è che ogni volta che faccio questo, Google invia una diversa URL OpenID, cioè, https://www.google.com/accounts/o8/id?id=SomethingThatChangesFromTimeToTime

Naturalmente io non sono poi in grado di dire wheter questo è o non è un nuovo utente. Sono un po 'perplesso: l'identificatore openid non dovrebbe rimanere sempre lo stesso?

+4

Prova a utilizzare più punti interrogativi e punti esclamativi!?!? – fig

+2

Di solito non lo faccio, ma ero davvero disorientato da questo comportamento. Mi aspettavo che il vantaggio di OpenId fosse di avere un URL univoco per identificarsi, piuttosto che affidarsi a un provider che ne assegna uno ogni volta. – Andrea

+0

anche io ho avuto lo stesso problema, ma per scavare ulteriormente ho scoperto che il dominio nel mio caso inviato per la richiesta di autenticazione è la stessa stringa, continua a dare valori diversi nei vari browser. L'ho provato in FF e cromato. non sono sicuro di ciò che mi manca qui. – awake416

risposta

19

L'identificativo OpenID di Google è più o meno una rappresentazione con hash di più dati compreso l'host da cui proviene la richiesta (più esattamente il parametro openid.realm inviato al provider). Quindi, se il tuo host cambia di volta in volta (come la porta e le modifiche all'indirizzo IP), anche l'ID cambierà di volta in volta. StackOverflow utilizza una soluzione alternativa anche per questo problema. Controllare questi posti:

Ecco una FAQ estratto da Google:

D: La specifica OpenID dice che il openid.realm è opzionale, e che se non fornito, Google dovrebbe utilizzare l'URL openid.return_to. Funzionerà?

A: Funzionerà nel senso che il protocollo verrà completato correttamente. Ma se il tuo URL return_to è qualcosa come www.example.com/authenticate?style=openid-federated_login, ci stai chiedendo di chiedere agli utenti di approvare e fidarsi di un indirizzo specifico sul tuo sito, che non è facile da usare. Inoltre, se ometti il ​​parametro openid.realm, non sarai mai in grado di modificare l'URL return_to: cambierà implicitamente anche l'ambito e gli identificatori URL degli utenti del tuo account Google.

+0

Sto facendo solo due autenticazioni dallo stesso host (locale), a pochi secondi di distanza l'una dall'altra. Quindi immagino che nulla stia cambiando; tuttavia ottengo diverse identità (openid.identity). – Andrea

+0

registra la comunicazione tra la tua app e google. I principali framework di oid supportano questo. Controlla se la richiesta è uguale per entrambe le tue query o meno. – SztupY

+0

SztupY: "incluso l'host da cui proviene la richiesta" non è strettamente vero. La variabile qui è il parametro openid.realm, che non è legato al punto da cui proviene la richiesta, ma piuttosto a dove verrà inviata la risposta (che potrebbe essere una cosa molto diversa, ma spesso è la stessa cosa). –

Problemi correlati