2013-02-17 11 views
5

Ho una app Web interna per la mia azienda che utilizza un login con sistema di autenticazione google. Funziona bene per la maggior parte, possono autenticarsi con google, dare il consenso alla mia app per accedere ai dettagli utente di base, e quindi quando vengono restituiti alla mia app, posso davvero ottenere i loro dettagli utente.login con google richiede sempre il consenso utente

Il problema è che ho pensato che una volta dato il consenso non avrebbero dovuto farlo ogni volta. È un'ipotesi errata? Come è ora, ogni volta che fanno clic sul "login con google" devono dare il consenso piuttosto che essere reindirizzati alla mia app.

Sto usando PHP (codeigniter) e una buona Oauth lib trovata su github (fork della libreria di phil sturgeon). C'è qualche parametro che dovrei passare, quindi l'utente non deve dare il consenso ogni volta, dopo la prima volta?

risposta

15

L'accesso a Google non richiede il consenso dell'utente ogni volta. Se stai utilizzando la procedura di accesso OAuth2, dovresti essere in grado di accedere una seconda volta senza nuove approvazioni: https://developers.google.com/accounts/docs/OAuth2Login

In alcuni contesti, tuttavia, è possibile disattivare l'autoapprovazione, con la successiva requisito del consenso dell'utente su ogni accesso.

Il primo caso e più comune è se l'applicazione richiede esplicitamente a Google di richiedere il consenso ogni volta. Controlla se la tua richiesta di autorizzazione (che potresti aver copiato da un esempio o codice di esempio) include "prompt = consenso" o il vecchio modulo non standard "approval_prompt = force". Rimuovendo questi parametri (se presenti), è probabile che l'autoapprovazione inizi a funzionare.

Un'altra situazione è se l'URL di reindirizzamento è basato su "localhost" o qualche altro URL che non appartiene allo spazio dei nomi DNS globale. In questo caso, per motivi di sicurezza, Google imposta un cookie sul computer dell'utente, nel dominio accounts.google.com, per segnalare che l'utente ha autorizzato _this_device_ di accedere a "pippo" su localhost (o dominio locale); Google autorizzerà solo l'accettazione di una seconda richiesta se trova il cookie. Il motivo è che il significato di "localhost" (o dominio locale o altro URL non creato nello spazio dei nomi DNS globale) dipende dal dispositivo e consentire l'autorizzazione per l'applicazione su più dispositivi potrebbe introdurre rischi per la sicurezza. Pertanto, se la tua azienda ha configurato i browser per cancellare tutti i cookie in uscita, e, utilizzi un URL non assoluto, potresti vedere i tuoi utenti che devono acconsentire ogni volta. La soluzione è di ospitare l'endpoint su un nome host valido per Internet (l'host non deve essere accessibile dall'esterno della Intranet, solo il nome host deve essere valido a livello globale) oppure è necessario esentare accounts.google.com da la politica di cancellazione dei cookie.

+0

Grazie breno. Immergendosi nella lib di terze parti, è stato esplicitamente aggiunto approval_prompt = force. Non l'avevo mai visto nei documenti che avevo letto, ma rimuovere ciò ha effettivamente risolto il problema. Funzionando come un fascino, grazie! – Greg

Problemi correlati