J'ai une application Google avec l'authentification OAuth 2.0. Tout fonctionnait bien mais récemment, j'ai commencé à obtenir l'écran "Demande d'autorisation" suivant:
La partie étrange est que j'obtiens cet écran quand je passe access_type=online
. Encore une fois, cela fonctionnait jusqu'à récemment.
Quelle peut en être la cause? TIA
Modifier:
Les portées demandées sont:
https://www.googleapis.com/auth/userinfo.email
https://www.googleapis.com/auth/userinfo.profile
J'ai déjà essayé:
access_type=online
approval_Prompt=auto
Éditer # 2:
Voici le code python que j'utilise pour générer l'URL d'authentification:
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
Mise à jour (14 octobre):
Même avec les nouvelles étendues, je reçois toujours l'écran de consentement. Récemment, je l'ai obtenu pour un nouvel appareil que j'utilisais pour l'authentification.
Je pense que G le fait lorsque votre application demande un jeton et qu'il y a toujours un jeton d'accès ou d'actualisation valide pour l'utilisateur pour les étendues en question.
La solution consiste à révoquer les jetons lorsque vous en avez terminé (soit à la déconnexion de l'utilisateur, soit immédiatement après l'authentification de l'utilisateur) en émettant cette demande:
https://accounts.google.com/o/oauth2/revoke?token={token}
Vous n'avez pas à fournir d'informations d'identification d'application, juste le jeton comme argument d'URL.
(docs ici https://developers.google.com/accounts/docs/OAuth2WebServer#tokenrevoke )
J'ai eu le même problème et aucune combinaison de access_type
ou approval_Prompt
les valeurs semblaient le résoudre. La révocation du jeton a fait l'affaire.
Je ne sais pas comment révoquer tous les jetons en attente pour votre application, sauf si vous les avez stockés. Pour tester avec votre propre compte d'utilisateur, vous pouvez révoquer manuellement le jeton existant pour votre application ici:
https://security.google.com/settings/security/permissions
Google a récemment modifié la portée du courrier électronique. Vous devez remplacer
https://www.googleapis.com/auth/userinfo.email
avec:
https://www.googleapis.com/auth/plus.profile.emails.read
et:
https://www.googleapis.com/auth/plus.login
Ensuite, l'accès hors ligne devrait disparaître.
Voir également:
https://developers.google.com/+/api/oauth#email
Avertissement: cette portée est obsolète. Google ne prendra plus en charge cette étendue après le 1er septembre 2014. Pour plus d'informations, voir Migration vers la connexion à Google+.
Cela modifie également la façon dont l'adresse e-mail est reçue:
Gardez également à l'esprit que vous devez activer l'API Google+ dans votre console de gestion pour que cela fonctionne.
En utilisant http://localhost
dans le redirect_url
paramètre de la demande OAuth obligera l'utilisateur à accorder un accès hors ligne la première fois qu'il s'authentifiera après chaque connexion.
Tzach. Afin de ne pas demander l'écran de consentement après la première connexion. Vous pouvez en avoir besoin pour transmettre la valeur à la fonction:
$ client-> setApprovalPrompt ("auto");
Je pense que cela a été répondu, mais je ne trouve pas le lien pour le moment.
En bref, Google a récemment apporté quelques modifications aux périmètres afin de mettre en œuvre des périmètres incrémentiels. Une partie de ces changements est que si votre application provoque une invite d'authentification, mais que l'utilisateur a déjà authentifié, Google doit demander quelque chose, donc demande un accès hors ligne. Essayez de définir
approval_Prompt=auto
pour éviter l'invite
J'avais le même problème. Bien que je ne mette pas
access_type=online
Cependant, selon ma compréhension, la valeur par défaut
access_type
est
online
De: https://developers.google.com/identity/protocols/OAuth2WebServer : "Le style d'accès par défaut est appelé en ligne."
Ce qui a résolu cela pour moi a été de supprimer:
Prompt=consent
Il y a bien sûr un formulaire de consentement lors de la première utilisation, il ne s'agit pas pour l'instant d'un formulaire de consentement demandant un accès hors ligne, ce qui effraie probablement certains utilisateurs potentiels.
Je crois que le paramètre Prompt est destiné à remplacer le paramètre approbation_Prompt. Mais il semble que si je le configure sur "consentement", cela devrait simplement signifier que je veux que l'écran de consentement normal soit affiché à chaque fois, pas l'écran de consentement "accès hors ligne". Les documents ici: https://developers.google.com/identity/protocols/OpenIDConnect#Prompt ne semblent pas réfuter cette notion, donc je ne sais pas pourquoi elle se comporte de cette façon. Mais au moins j'ai pu le faire fonctionner comme je le veux, pour l'instant.
Eh bien, je ne sais pas si cela constitue réellement une réponse, mais j'ai trouvé que certains utilisateurs voient le:
"Avoir un accès hors ligne"
par rapport aux autres (qui obtiennent ce que je pense que vous voulez voir):
"Afficher les informations de base sur votre compte"