edit: je l'ai résolu facilement en ajoutant " https://www.googleapis.com/auth/plus.me } _" à mon champ d'application, mais je voulais lancer une discussion sur ce sujet et voir si quelqu'un d'autre connu le même problème.
J'ai un service fonctionnant sur GCP, un moteur d'application qui utilise Google API. Ce matin, j'ai reçu ce message "d'avertissement" qui renvoyait une erreur de 500 . Cela fonctionnait bien depuis un mois et que cette erreur a seulement été jetée aujourd'hui (5 heures avant ce billet).
Quelqu'un sait-il pourquoi Google a renvoyé une étendue supplémentaire lors de l'oauth2callback? Toute idée supplémentaire est très appréciée. S'il vous plaît laissez-moi savoir si vous avez déjà vu cela ou pas. Je n'ai pu le trouver nulle part.
Type d'exception: Avertissement sur/oauth2callback
Valeur d'exception: La portée a changé de " https://www.googleapis.com/auth/userinfo.email }" à " (https://www.googleapis.com/auth/userinfo.email } _ https://www.googleapis.com/auth/plus.me ".
Cette ligne a jeté l'erreur:
flow.fetch_token(
authorization_response=authorization_response,
code=request.session["code"])
L'URL de retour est https://my_website.com/oauth2callback?state=SECRET_STATE&scope=https://www.googleapis.com/auth/userinfo.email+https://www.googleapis.com/auth/plus .moi#
au lieu de la valeur habituelle https://my_website.com/oauth2callback?state=SECRET_STATE&scope=https://www.googleapis.com/auth/userinfo.email# }
edit: exemple de code
import the required things
SCOPES = ['https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/calendar',
# 'https://www.googleapis.com/auth/plus.me' <-- without this, it throws the error stated above. adding it, fixes the problem. Google returns an additional scope (.../plus.me) which causes an error.
]
def auth(request):
flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file(
CLIENT_SECRETS_FILE, scopes=SCOPES)
flow.redirect_uri = website_url + '/oauth2callback'
authorization_url, state = flow.authorization_url(
access_type='offline', include_granted_scopes='true',
Prompt='consent')
request.session["state"] = state
return redirect(authorization_url)
def oauth2callback(request):
...
# request.session["code"] = code in url
authorization_response = website_url + '/oauth2callback' + parsed.query
flow.fetch_token(
authorization_response=authorization_response,
code=request.session["code"])
...
Nous avons découvert le même problème aujourd'hui. Notre solution fonctionne sans problème depuis quelques mois.
Nous avons résolu le problème en mettant à jour nos portées d'origine 'profil email' en https://www.googleapis.com/auth/userinfo.emailhttps://www.googleapis.com /auth/userinfo.profile et en apportant quelques modifications mineures au code.
Lors du lancement du client google_auth_oauthlib.flow, nous avions auparavant transmis les étendues dans une liste avec un seul élément contenant une chaîne dans laquelle les étendues étaient séparées par des espaces.
google_scopes = 'email profile'
self.flow = Flow.from_client_secrets_file(secret_file, scopes=[google_scopes], state=state)
Maintenant, avec les portées mises à jour, nous envoyons une liste où chaque élément est une portée distincte.
google_scopes = 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile'
self.flow = Flow.from_client_secrets_file(secret_file, scopes=google_scopes.split(' '), state=state)
J'espère que ça aide, bonne chance!
Compte tenu du moment choisi par Google, vous pourriez être affecté par le changement suivant: "À compter du 18 juillet 2017, les clients Google OAuth qui demandent certaines étendues OAuth sensibles seront examinés par Google." https: //developers.google.com/apps-script/guides/client-verification
D'après votre erreur, il semble que vous utilisiez une étendue dépréciée. Voir: https://developers.google.com/+/web/api/rest/oauth#deprecated-scopes
Je suppose également que vous utilisez peut-être la bibliothèque Web de la plateforme Google+ et peut-être la méthode Personnes: obtenir . Essayez peut-être d'utiliser l'une des portées suivantes à la place:
https://www.googleapis.com/auth/plus.login
ou
https://www.googleapis.com/auth/plus.me