Je suis ce guide de démarrage rapide de l'API Gmail pour autoriser un utilisateur à utiliser Gmail. API. J'ai créé une application de type Web Application sur la console Google et généré son fichier credentials.json (et l'ai placé à côté de quickstart.rb). J'ai fourni un redirect_uri à l'application qui est hébergée en tant qu'application rails sur heroku. L'url est au format ci-dessous

https://myapp-api-heroku.com/my_redirect_endpoint

Lorsque j'exécute le quickstart.rb, il affiche le message suivant dans la console

Ouvrez l'URL suivante dans le navigateur et entrez le code résultant après autorisation : https://accounts.google.com/o/oauth2/auth?access_type=offline&approval_prompt=force&client_id=my_client_id_here&include_granted_scopes=true&redirect_urif=urn:ieg oauth:2.0:oob&response_type=code&scope=https://www.googleapis.com/auth/gmail.readonly

Après avoir ouvert le lien dans le navigateur, il affiche cette erreur

L'URI de redirection dans la demande, urn:ietf:wg:oauth:2.0:oob, ​​ne peut être utilisé que par un ID client pour une application native. Il n'est pas autorisé pour le type de client WEB. Vous pouvez créer un ID client pour l'application native sur https://console.developers.google. com/apis/credentials/oauthclient

J'ai enregistré le redirect_uri fourni sur la console google dans l'application respective. Je ne parviens pas à trouver la cause de ce problème. Je souhaite éventuellement appeler cette API Gmail à partir de mon serveur d'applications rails, mais je ne peux pas aller plus loin.

1
Masroor 8 oct. 2020 à 14:20

1 réponse

Meilleure réponse

Il existe plusieurs types d'authentification, examinons-en deux. Le premier étant le Web qui serait conçu pour fonctionner sur un serveur Web où l'autorisation est renvoyée au serveur Web lui-même pour le gérer. La seconde étant une application installée qui renverrait la réponse à l'hôte local ou au point de terminaison qui a envoyé la demande.

Le code que vous suivez Démarrage rapide Ruby indique en haut qu'il est conçu pour fonctionner comme une application console ou une application installée, c'est pourquoi vous voyez urn:ietf:wg:oauth:2.0:oob, ​​cela signifie localhost

Suivez les étapes décrites dans le reste de cette page pour créer une application de ligne de commande Ruby simple qui envoie des requêtes à l'API Gmail.

Le code utilisé pour s'authentifier avec les deux types de clients différents est différent. le code de votre exemple est conçu pour fonctionner avec une application installée pour que cela fonctionne, vous devez créer des informations d'identification natives installées sur la console de développement google vous avez créé des informations d'identification Web qui ne fonctionneront pas avec le code que vous utilisez.

Pour une application de serveur Web, vous devez suivre authentification Web

require 'google/apis/drive_v2'
require 'google/api_client/client_secrets'

client_secrets = Google::APIClient::ClientSecrets.load
auth_client = client_secrets.to_authorization
auth_client.update!(
  :scope => 'https://www.googleapis.com/auth/drive.metadata.readonly',
  :redirect_uri => 'http://www.example.com/oauth2callback',
  :additional_parameters => {
    "access_type" => "offline",         # offline access
    "include_granted_scopes" => "true"  # incremental auth
  }
)
2
DaImTo 8 oct. 2020 à 11:41