Come distinguere / identificare gli utenti con OpenID senza richiedere campi SREG?
-
29-09-2019 - |
Domanda
Ho accarezzato il PHP Biblioteca Janrain OpenID, per lo più in seguito insieme a un tutorial che ho trovato su ZendZone .
Come si fa a distinguere tra gli utenti - in particolare gli utenti di Google, che hanno tutti finiscono per utilizzando lo stesso URL OpenID, https://www.google.com/accounts/o8/id ?
In sostanza, io sono al punto in cui posso rilevare che essi hanno un account OpenID ... che hanno autenticato con successo ... ma la mia applicazione ancora non sa chi sono; solo che autenticati.
Per distinguere gli utenti, il tutorial utilizza una "richiesta di semplice registrazione" per richiedere di posta elettronica dell'utente del provider OpenID -. E quindi utilizzare l'indirizzo e-mail per vedere se questo è un utente di ritorno
Non stava lavorando per me e a quanto pare non funziona con alcuni provider così mi è stato eccitato quando sono incappato in una funzione getDisplayIdentifier
.
require_once "Auth/OpenID/Consumer.php";
require_once "Auth/OpenID/FileStore.php";
// create file storage area for OpenID data
$store = new Auth_OpenID_FileStore('/wtv');
$consumer = new Auth_OpenID_Consumer($store);
$oid_response = $consumer->complete("http://example.com/oir_return");
if ($oid_response->status == Auth_OpenID_SUCCESS) {
$hopefullyUniqueUserID = $oid_response->getDisplayIdentifier(); // I assumed this would be a relatively permanent way to identify the user...
// I was wrong.
}
Purtroppo, dopo un paio d'ore, il valore restituito da cambiamenti getDisplayIdentifier
.
Soluzione 2
Il problema era che OpenIDs di Google sono unici al-Dominio ; Ero stato assente alternata distrattamente tra http://www.mysite.com
e http://mysite.com
, che ha causato l'url OpenID identità per il cambiamento!
Altri suggerimenti
Scorrendo il codice, penso che sia $oid_response->identity_url
che si desidera. Per me (anche se in DotNetOpenAuth non php-OpenID), che ritorna come
https://www.google.com/accounts/o8/id?id=AItOawmqjknrgk6f9cNdPIVxW43GewJPa1ZW4GE
da parte di Google, dove la parte ID è riproducibile e, auspicabilmente, unico per me. Comunque non ho lasciato un paio d'ore per vedere se questo cambia, quindi mi scuso se questo è ciò che hai già avuto da getDisplayIdentifier - ma scrematura la fonte sembra che sarebbe basta usare la prima parte, ma poi non ho sono PHP esperto.
Perché non è sufficiente utilizzare l'URL OpenID per identificare gli utenti? Consideratelo unico come un indirizzo email.
Secondo l'ultimo paragrafo di seguito, si dovrebbe assolutamente utilizzare l'attributo identity_url
dell'oggetto risposta (concesso, questo è in riferimento alla libreria Python, ma le implementazioni sono molto simile):
Il display identificatore è legato alla Identifier sostenuto, ma il due non sono sempre uguali. L'identificatore di visualizzazione è qualcosa che il utente deve riconoscere come quello sono entrati, mentre la risposta è identificatore sostenuto (l'attributo L {} identity_url) può avere in più informazioni per una migliore persistenza.
URL saranno spogliati dei loro frammenti per la visualizzazione. Xris volontà visualizzare l'identificativo leggibile (i-nome) al posto del identificatore permanente (i-numero).
Utilizzare l'identificatore di visualizzazione nell'interfaccia utente. Uso L {} identity_url per interrogare il server di database o l'autorizzazione.
Dalla documentazione python-OpenID .