web-dev-qa-db-fra.com

Portée de l'API Google modifiée

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"])
    ...
7
Julius Ting

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! 

3
Rickard Bergeling

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

0
Thomas Koch

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
0
ScottMcC