oauth-2.0 - playground - oauth url




"Questa app vorrebbe: avere accesso offline" quando access_type=online (6)

Ho un'applicazione Google con autenticazione OAuth 2.0. Tutto funzionava bene ma recentemente ho iniziato a ricevere la seguente schermata "Richiesta di autorizzazione":

La parte strana è che ottengo questa schermata quando passo access_type=online . Ancora una volta, questo funzionava fino a poco tempo fa.

Quale può essere la causa di questo? TIA

Modificare:

Gli ambiti richiesti sono:

https://www.googleapis.com/auth/userinfo.email
https://www.googleapis.com/auth/userinfo.profile

Ho già provato:

  • con e senza access_type=online
  • con e senza approval_prompt=auto

Modifica n. 2:

Questo è il codice Python che sto usando per generare l'URL di autenticazione:

encoded_params = urllib.urlencode({
    "response_type" : "code",
    "client_id" : MY_CLIENT_ID,
    "scope" : " ".join(MY_SCOPES),
    "redirect_uri" : MY_REDIRECT_URI,
    "state" : random_security_token,
    "access_type" : "online",
    "approval_prompt" : "auto",
    })

auth_url = "https://accounts.google.com/o/oauth2/auth?" + encoded_params

Aggiornamento (14 ottobre):

Anche con i nuovi ambiti, ottengo ancora la schermata di consenso. Recentemente l'ho preso per un nuovo dispositivo che stavo usando per l'autenticazione.


Beh, non so se questo in realtà costituisce una risposta, ma ho scoperto che alcuni utenti vedono il:

'Accesso offline'

rispetto ad altri (che ottengono quello che penso tu voglia vedere):

"Visualizza le informazioni di base sul tuo account"


Google ha recentemente modificato l'ambito per l'email. Dovresti sostituire

https://www.googleapis.com/auth/userinfo.email

con:

https://www.googleapis.com/auth/plus.profile.emails.read 

e:

https://www.googleapis.com/auth/plus.login

Quindi l'accesso offline dovrebbe scomparire.

Guarda anche:

https://developers.google.com/+/api/oauth#email

Attenzione: questo ambito è deprecato. Google non supporterà più questo ambito dopo il 1 settembre 2014. Per i dettagli, vedi Migrazione a Accesso a Google+.

Questo cambia anche il modo in cui viene ricevuto l'indirizzo email:

https://developers.google.com/+/api/auth-migration#email

Ricorda inoltre che devi attivare l'API di Google+ nella console di gestione affinché funzioni.


L'utilizzo di http://localhost nel parametro redirect_url della richiesta OAuth farà sì che all'utente venga chiesto di concedere l'accesso offline la prima volta che eseguono l'autenticazione dopo ogni accesso.


Penso che G lo faccia quando la tua app richiede un token e c'è ancora un token di accesso o di aggiornamento valido per l'utente per gli ambiti in questione.

La soluzione è di revocare i token quando hai finito con loro (o sul logout utente o subito dopo aver autenticato l'utente), emettendo questa richiesta:

https://accounts.google.com/o/oauth2/revoke?token={token}

Non devi fornire alcuna credenziale dell'app, solo il token come argomento URL.

(documenti qui https://developers.google.com/accounts/docs/OAuth2WebServer#tokenrevoke )

Ho avuto lo stesso problema e nessuna combinazione di valori access_type o approval_prompt sembrava risolverlo. Revocare il token ha fatto il trucco.

Non sono sicuro di come revocare tutti i token in circolazione per la tua app, a meno che non ti sia capitato di memorizzarli. Per testare con il tuo account utente, puoi revocare manualmente il token esistente per la tua app qui:

https://security.google.com/settings/security/permissions

Stai utilizzando la libreria client API di Google?

https://developers.google.com/api-client-library/

Imposta access_type su "offline" quando si aggiornano i token autonomamente

Nella versione Python, ho cambiato la riga 1204 di oauth2client / client.py

a partire dal

    'access_type': 'offline',

a

    'access_type': 'online',

e ora funziona correttamente.


Stavo avendo lo stesso problema. Anche se non stavo preparando

access_type=online

Tuttavia, secondo la mia comprensione, il default

access_type 

è

online 

Da: https://developers.google.com/identity/protocols/OAuth2WebServer : "Lo stile predefinito di accesso è chiamato online."

Ciò che mi ha risolto è stato rimuovere:

prompt=consent

C'è ancora un modulo di consenso sul primo go, ovviamente, solo che ora non è un modulo di consenso che richiede l'accesso offline, il che probabilmente spaventa alcuni potenziali utenti.

Credo che il parametro prompt sia inteso come una sostituzione del parametro approval_prompt. Ma sembra che se lo avessi impostato su "consenso", ciò dovrebbe significare semplicemente che voglio la normale schermata di consenso mostrata ogni volta, non la schermata di consenso "accesso offline". I documenti qui: https://developers.google.com/identity/protocols/OpenIDConnect#prompt non sembrano smentire questa nozione, quindi non sono sicuro del motivo per cui si comporta in questo modo. Ma almeno sono riuscito a farlo funzionare nel modo in cui lo voglio, per ora.