A partir du mois d'avril 2015, Google va imposer l'utilisation de l'authentification Oauth 2.0 pour l'accès à ses services. Ce mode d'authentification améliore la sécurité et propose de nouvelles possibilités :
- l'utilisateur final décide d'autoriser l'accès ou non à des services,
- l'authentification en deux étapes (sms) est disponible...
Ce changement n'est pas transparent pour les applications qui utilisent les services Google avec les fonctions Ggl*. En effet, historiquement les fonctions Ggl utilisaient l'API "ClientLogin" comme mécanisme d'authentification. Avec ce dernier Google ne demandait que l'envoi d'un couple utilisateur/mot de passe, qui permettait d'obtenir un "token" de session à utiliser pour l'accès aux API. Avec l'authentification OAuth 2.0, il faut dans un premier temps "déclarer" l'application sur sa console développeur Google. Cela permet d'obtenir de Google un identifiant client, ainsi qu'un code secret propre à l'application : ils servent à la place du couple utilisateur/mot de passe à se connecter.
La fonction de connexion GglConnecte et le type de variable gglconnexion ont donc été adaptés pour cette échéance d'avril 2015 :
- dans la version 20 de WINDEV,
- dans la version 19 de WINDEV, en la complétant de la mise à jour 89 795 disponible dans les modules correctifs des ressources pratiques.
Toutes les applications qui utilisent des services de Google via les fonctions Ggl* du Wlangage
devront être donc recompilées avec l'une de ces versions pour continuer
à utiliser les services de Google à partir d'avril 2015.
devront être donc recompilées avec l'une de ces versions pour continuer
à utiliser les services de Google à partir d'avril 2015.
Recommandation importante : avec cette nouvelle syntaxe adaptée à l'authentification OAuth 2.0, il est fortement conseillé d'appeler explicitement la fonction GglConnecte en donnant en paramètre l'ensemble des services Google nécessairesà l'application (syntaxe 2 de la fonction GglConnecte). Sans cela, l'utilisateur final de l'application devra en plus de la connexion initiale, valider une demande d'autorisation lorsqu'il tentera d'accéder à un service Google. En effet, toutes les fonctions Ggl* sont adaptées afin d'ouvrir automatiquement une fenêtre de connexion ou d'autorisation si l'application n'est pas connectée ou autorisées à accéder à Google ou l'un de ses services. Il est donc préférable via GglConnecte de provoque une connexion unique incluant l'autorisation d'utilisation des services désirés.
Voici les liens directs vers les pages d'aide qui ont été mises à jour :
Aide des différentes jeux de fonctions d'utilisation des services Google :
- Contacts_Google,
- Agenda Google (authentification OAuth 2.0 nécessaire depuis le 17/11/2014),
- Documents Google,
- Album Picasa.
Et enfin voici un exemple de code de connexion "avant / après" :
Exemple de code de connexion type "ClientLogin" utiliser jusqu'à présent pour se connecter à Google :
googleConnexion est un gglConnexion
googleConnexion.Email=gsGoogleCompte
googleConnexion.MotDePasse=gsGoogleMotDePasseCompte
googleConnexion.NomApplication=gsGoogleNomApplication
//Connexion au compte Google
SI PASGglConnecte(googleConnexion)ALORS
Erreur(ErreurInfo(ErreurDétectée))
SINON
//Récupération de l'agenda par défaut
AgendaExistant est un gglAgenda
AgendaExistant=GglRécupèreAgenda(googleConnexion)
SIErreurDétectéeALORS
Erreur(ErreurInfo(ErreurDétectée))
SINON
Info("Agenda récupéré !")
FIN
FIN
googleConnexion.Email=gsGoogleCompte
googleConnexion.MotDePasse=gsGoogleMotDePasseCompte
googleConnexion.NomApplication=gsGoogleNomApplication
//Connexion au compte Google
SI PASGglConnecte(googleConnexion)ALORS
Erreur(ErreurInfo(ErreurDétectée))
SINON
//Récupération de l'agenda par défaut
AgendaExistant est un gglAgenda
AgendaExistant=GglRécupèreAgenda(googleConnexion)
SIErreurDétectéeALORS
Erreur(ErreurInfo(ErreurDétectée))
SINON
Info("Agenda récupéré !")
FIN
FIN
Exemple de code de connexion nécessaire pour une authentification OAuth 2.0 (version minimale requise 190056S + mise à à jour 89 795 des ressources pratiques :
googleConnexion est un gglConnexion googleConnexion.Email=gsGoogleCompte//de la forme : nomutilisateur@gmail.com
googleConnexion.ClientID=gsGoogleClientID// de la forme : 568705434218-sed6r7rgd7alcnbehs67f1k5s6ixqz84q.apps.googleusercontent.com
googleConnexion.ClientSecret=gsGoogleClientSecret// de la forme : kshKqXQPxUWmGLDiyBcmrCR2
// Pour créer un ID et un secret il faut :
// 1 - Avoir un compte Google (par forcément celui auquel on se connecte, ce sera le compte associé à cette application)
// 2 - Crée un projet dans la console Google (https://code.google.com/apis/console)
// 3 - Crée un projet dans la console en indiquant l'identifiant voulez (avec les restrictions Google : entre 6 et 30 caractères, que des minuscules...)
// note : ce n'est pas cette identifiant qu'il faudra utiliser
// 4 - Sélectionner le projet dans la console Google et choisissez "Activer une API", et activez "Calendar API" (et "Contact API" si vous utilisez les contacts)
// 5 - Dans la console aller sur "Identifiant", puis "Créer un identifiant client", et "Application installée"
// ==> la Google donne l'identifiant et la clé secrète
//Il faut mémoriser et le cas échéant restaurer les informations de connexion pour éviter de re- demander l'autorisation à chaque connexion
bufGoogleConnexion est un Buffer
sNomFichierTokenGoogleest une chaîne=fRepDonnées()+"\tokengoogle.bin"
//on a précédemment mémorisé une connexion ?
SIfFichierExiste(sNomFichierTokenGoogle)ALORS
//On restaure la connexion avec les autorisation qu'elle a pour ne pas re-demander à chaque fois les autorisations
QUAND EXCEPTION DANS
Désérialise(googleConnexion,fChargeBuffer(sNomFichierTokenGoogle),psdBinaire)
FAIRE
//Echec de la dé-sérialisation, le fichier est peut-être endommagé
//=> il y aura une nouvelle demande d'authentification à l'utilisateur
FIN
FIN
//Connexion au compte Google
SI PASGglConnecte(googleConnexion,gglServiceAgenda)ALORS//==> Ici la première fois une fenêtre d'authentification va s'ouvrir à l'utilisateur
Erreur(ErreurInfo())
SINON
//Mémorisation de la connexion Google avec les informations d'autorisation
Sérialise(googleConnexion,bufGoogleConnexion,psdBinaire)
fSauveBuffer(sNomFichierTokenGoogle,bufGoogleConnexion)
Info("Connecté")
FIN
googleConnexion.ClientID=gsGoogleClientID// de la forme : 568705434218-sed6r7rgd7alcnbehs67f1k5s6ixqz84q.apps.googleusercontent.com
googleConnexion.ClientSecret=gsGoogleClientSecret// de la forme : kshKqXQPxUWmGLDiyBcmrCR2
// Pour créer un ID et un secret il faut :
// 1 - Avoir un compte Google (par forcément celui auquel on se connecte, ce sera le compte associé à cette application)
// 2 - Crée un projet dans la console Google (https://code.google.com/apis/console)
// 3 - Crée un projet dans la console en indiquant l'identifiant voulez (avec les restrictions Google : entre 6 et 30 caractères, que des minuscules...)
// note : ce n'est pas cette identifiant qu'il faudra utiliser
// 4 - Sélectionner le projet dans la console Google et choisissez "Activer une API", et activez "Calendar API" (et "Contact API" si vous utilisez les contacts)
// 5 - Dans la console aller sur "Identifiant", puis "Créer un identifiant client", et "Application installée"
// ==> la Google donne l'identifiant et la clé secrète
//Il faut mémoriser et le cas échéant restaurer les informations de connexion pour éviter de re- demander l'autorisation à chaque connexion
bufGoogleConnexion est un Buffer
sNomFichierTokenGoogleest une chaîne=fRepDonnées()+"\tokengoogle.bin"
//on a précédemment mémorisé une connexion ?
SIfFichierExiste(sNomFichierTokenGoogle)ALORS
//On restaure la connexion avec les autorisation qu'elle a pour ne pas re-demander à chaque fois les autorisations
QUAND EXCEPTION DANS
Désérialise(googleConnexion,fChargeBuffer(sNomFichierTokenGoogle),psdBinaire)
FAIRE
//Echec de la dé-sérialisation, le fichier est peut-être endommagé
//=> il y aura une nouvelle demande d'authentification à l'utilisateur
FIN
FIN
//Connexion au compte Google
SI PASGglConnecte(googleConnexion,gglServiceAgenda)ALORS//==> Ici la première fois une fenêtre d'authentification va s'ouvrir à l'utilisateur
Erreur(ErreurInfo())
SINON
//Mémorisation de la connexion Google avec les informations d'autorisation
Sérialise(googleConnexion,bufGoogleConnexion,psdBinaire)
fSauveBuffer(sNomFichierTokenGoogle,bufGoogleConnexion)
Info("Connecté")
FIN