PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Connexion Google OAuth2 et Renouvellement du Token
Connexion Google OAuth2 et Renouvellement du Token
Iniciado por Damien R., mai., 11 2022 3:47 PM - 20 respostas
Membro registado
2 mensagems
Publicado em maio, 11 2022 - 3:47 PM
Bonjour à tous,

Avec le futur changement fin mai, je dois passer ma petit app d'envoi de mail en OAuth2 pour google. Cette appli windows envoi aussi des mails en smtp pour d'autres comptes (ovh, 1and, orange etc...).
J'ai repris le code du webinaire récent.

Tout fonctionne bien, ou presque.

Le Token ne veut pas se renouveler. La propriété Actualisation du token étant vide, cela indique qu'il ne peut être renouveler. Et si j'essaie, il est non valide et donc je dois en récup un nouveau.
Résultat, toutes les heures, on doit donc demander un nouveau token.

Je précise qu'actuellement l'application sur la console google est en Test, nous avons décidé de ne pas publier car nous avons très peu de client avec un compte google pour l'envoi de mail, et que l'appli est en fin de vie (le process de validation parait fastidieux)

Le code de la procédure de connexion que j'utilise :
Procedure ConnexionOAuth2(sAdresseEmail est une chaîne):booléen

// Session OAuth
bufToken est un Buffer
gsSessionOAuth = fRepExe() + fSep() + "OAuth2_" + sAdresseEmail + ".bin"

// Connexion OAuth
EmailOAuth est un OAuth2Paramètres
EmailOAuth.ClientID = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com"
EmailOAuth.ClientSecret = "xxxxxxxxxxxxxxxxxxxxxxxxx"
EmailOAuth.URLAuth = "https://accounts.google.com/o/oauth2/v2/auth"
EmailOAuth.URLToken = "https://accounts.google.com/o/oauth2/token"
EmailOAuth.Scope = "https://www.googleapis.com/auth/userinfo.email" + " " + "https://www.googleapis.com/auth/gmail.send"
EmailOAuth.URLRedirection = "http://localhost:9000"

// Token précédemment mémorisé ?
SI fFichierExiste(gsSessionOAuth) ALORS
QUAND EXCEPTION DANS
// Charge la session
bufToken = fChargeBuffer(gsSessionOAuth)
Désérialise(gStToken,bufToken,psdBinaire)
FAIRE
// Erreur de relecture, il faut refaire une authentification (voir plus bas avec gstToken.Valide)
SINON
// On vérifie la date d'expiration du token, et renouvellement si besoin
SI gStToken.DateExpiration-1Min < DateHeureSys() _ET_ gStToken.Actualisation <> "" ALORS
gStToken = gStToken.RenouvelleToken()
SI gStToken.Valide ALORS
SauveToken()
SINON
// Token n'a pas pu être renouveler, il faut refaire une authentification (voir plus bas avec gstToken.Valide)
FIN
FIN
FIN
FIN

SI PAS gStToken.Valide ALORS
fSupprime(gsSessionOAuth)
// Connexion au service
Info("Votre navigateur va s'ouvrir pour vous connecter à votre compte Google","Une fois la connexion effectuée, vous devrez cocher le service <Envoyer des e-mails en votre nom.>")
gStToken = AuthIdentifie(EmailOAuth)
SI gStToken.Valide ALORS
SauveToken()
FIN
FIN

PROCEDURE INTERNE SauveToken()
Sérialise(gStToken,bufToken,psdBinaire)
fSauveBuffer(gsSessionOAuth,bufToken)
FIN

RENVOYER gStToken.Valide
Membro registado
88 mensagems
Popularité : +2 (2 votes)
Publicado em maio, 13 2022 - 10:00 AM
Bonjour,
Je suis également concerné par ce changement d'accès à Google, et vais devoir implémenter cette authentification Google.
Où avez vous trouvé le code du Webinar ? Je suis abonné à la LST mais je ne trouver rien.
Cordialement,

--
Olivier Heckel
Membro registado
2 mensagems
Publicado em maio, 13 2022 - 11:25 AM
Bonjour,
J'ai enlevé le test sur la propriété actualisation du token, parfois ca rafraichit le token, parfois erreur.
Bon dans le cas d'une erreur, je supprime le token et le client se reconnecte, mais c'est ennuyeux il doit se reconnecter régulièrement.
Membro registado
88 mensagems
Popularité : +2 (2 votes)
Publicado em maio, 13 2022 - 1:24 PM
Merci pour l'information.
Cordialement,

--
Olivier Heckel
Membro registado
88 mensagems
Popularité : +2 (2 votes)
Publicado em maio, 13 2022 - 2:30 PM
Bon pour l'authentification OAuth, cela fonctionne, et je récupère un token (gstToken ci-dessous).
La suite du code, c'est l'ouverture d'une session SMTP et la création du mail à envoyer.
j'ai donc le code ci-dessous :
MAsessionSMTP est un emailSessionSMTP
MAsessionSMTP.AdresseServeur = "smtp.gmail.com"
MAsessionSMTP.Nom = "nom@gmail.com"
MAsessionSMTP.MotDePasse = "mot de passe"
MAsessionSMTP.Port = 587
MAsessionSMTP.Option = emailOptionSécuriséTLS
MAsessionSMTP.AuthToken = gstToken
//
SI EmailOuvreSession(MAsessionSMTP) = FAUX ALORS
Erreur("Impossible d'ouvrir la session SMTP.", ErreurInfo(),"En cas de TimeOut, assurez-vous des paramètres du pare-Feu sur le port utilisé (" + ...
MAsessionSMTP.Port + ")")
RETOUR
FIN


Le programme se bloque sur la fonction EmailOuvreSession, et plus rien.

Qu'ai-je oublié ? ou mal fait ?

--
Olivier Heckel
Membro registado
98 mensagems
Popularité : +2 (2 votes)
Publicado em maio, 25 2022 - 5:59 PM
Bonjour,
Je suis dans le même cas qu'Olivier...
J'ai le message d'erreur 'Impossible ouvrir le SMTP...'
Voici mon code...
Merci de m'indiquer ou cela pêche!!!

sGmailPersistantOauth est une chaîne = fRepDonnées()+[fSep]+"AuthSession_G.bin"

MaOauth2_G est un OAuth2Paramètres // Service Oauth

MaOauth2_G.ClientID = "1111111111111-3qcns85mmlop8qhtcon806fbjlmpv8.apps.googleusercontent.com"
MaOauth2_G.ClientSecret = "xxxxxxx-8BLuuytHwgoV1Yg"
MaOauth2_G.URLAuth = "https://accounts.google.com/o/oauth2/v2/auth"
MaOauth2_G.URLToken = "https://accounts.google.com/o/oauth2/token"
MaOauth2_G.Scope = "https://www.googleapis.com/auth/gmail.send"
MaOauth2_G.URLRedirection = "http://localhost:9000"
MaOauth2_G.TypeRéponse = oauth2TypeRéponseCode

Token_G=AuthIdentifie(MaOauth2_G)
SI Token_G.Valide ALORS
ToastAffiche(("La connexion OAuth2 est valide"))
SINON
Erreur("Echec de connexion à l'OAuth2")
FIN

SI fFichierExiste(sGmailPersistantOauth) ALORS
QUAND EXCEPTION DANS
bufToken = fChargeBuffer(sGmailPersistantOauth)
Désérialise(Token_G,bufToken,psdBinaire)
FAIRE
// Erreur de relecture du Token... Il faut refaire une authentification
SINON
SI (Token_G.DateExpiration-1Min <DateHeureSys()) _ET_ Token_G.Actualisation<>"" ALORS
Token_G = Token_G.RenouvelleToken()
SI Token_G.Valide ALORS
Sérialise(Token_G,bufToken,psdBinaire)
SINON
// Erreur de relecture du Token... Il faut refaire une authentification
FIN
FIN
FIN
FIN

SI PAS Token_G.Valide ALORS // Reconnexion au service Google Gmail Oauth2
Token_G = AuthIdentifie(MaOauth2_G)
SI Token_G.Valide ALORS
Sérialise(Token_G,bufToken,psdBinaire)
fSauveBuffer(sGmailPersistantOauth, bufToken)
FIN
FIN

// Identification OAuth
MaSession.AdresseServeur = "smtp.gmail.com"
MaSession.Nom = ADRESSE_MEL
MaSession.MotDePasse = MDP_MEL
MaSession.Port = 587
MaSession.Option = emailOptionSécuriséTLS
MaSession.AuthToken = Token_G //AuthIdentifie(MaOauth2_G)

// Si l'identification a réussi, il faut se connecter à la boîte email
SI MaSession.AuthToken <> Null ALORS
SI EmailOuvreSession(MaSession) = FAUX ALORS
// Erreur d'ouverture de session
Erreur("Impossible d'ouvrir la session SMTP.", ErreurInfo(), ...
"En cas de TimeOut, assurez-vous des paramètres du " + ...
"""Pare-Feu"" sur le port utilisé (" + ...
MaSession.Port + ")")
RETOUR
FIN
FIN
FIN


Quelqu'un a-t-il un code qui fonctionne avec l'authentification Oauth2 imposé par Google dès la semaine prochaine ?
D'avance merci de votre aide

--
Patrick PELISSON
Publicado em maio, 27 2022 - 9:18 AM
Bonjour,
pour que ça fonctionne, il faut utiliser dans le scope :
"https://mail.google.com"
sinon pour le "https://www.googleapis.com/auth/gmail.send"
il faut donner des autorisations dans le compte google car c'est une donnée sensible

Adrien
Publicado em maio, 30 2022 - 12:13 PM
De ce que j'ai compris le scope "https://mail.google.com" (qui donne un
accès complet à la boite gmail) est largement plus sensible que
"https://www.googleapis.com/auth/gmail.send" (qui ne permet que l'envoi
de nouveaux mails) du point de vue de google .

Dans tous les cas une validation de l'application doit être réalisée
auprès de google (le truc casse pied...).

J'ai fait une remonté ref 672427 auprès du support pour le cas de la
connexion au stmp qui ne fonctionne pas avec un scope plus restreint que
"https://mail.google.com". Si voulez l'appuyer de votre côté. Dans tous
les cas plus le scope est restreint plus la validation de l'application
sera aisée...

eric l.

> Le 27/05/2022 à 07:18, Adrien a écrit :
Bonjour,
pour que ça fonctionne, il faut utiliser dans le scope :
"https://mail.google.com"
sinon pour le "https://www.googleapis.com/auth/gmail.send"
il faut donner des autorisations dans le compte google car c'est une
donnée sensible

Adrien
Membro registado
98 mensagems
Popularité : +2 (2 votes)
Publicado em junho, 01 2022 - 10:54 AM
Bonjour,

Voici le code qui se trouve dans le bouton [envoyer] de ma fenêtre Email. Cela fonctionne et ne redemande pas systématiquement un reconnexion à la fenêtre authentification de Gmail .
Cela ne vous empêchera pas de faire valider votre application par Google... alors bon courage et pas mal de patience.
// ============================================================================
SI gnFlag_Gmail=1 ALORS // Présence d'une adresse Gmail alors procédure OAuth2
//------------------------------------------------------------------------------

sGmailPersistantOauth est une chaîne = fRepDonnées()+[fSep]+"AuthSession_G.bin"
bufToken est un Buffer
MaOauth2_G est un OAuth2Paramètres // Service Oauth

// Token_G est existant
SI fFichierExiste(sGmailPersistantOauth) = VRAI ALORS
//QUAND EXCEPTION DANS
bufToken = fChargeBuffer(sGmailPersistantOauth)
Désérialise(Token_G,bufToken,psdBinaire)
SI (Token_G.DateExpiration-1Min <DateHeureSys()) _ET_ Token_G.Actualisation<>"" ALORS Token_G = Token_G.RenouvelleToken()
// Enregistrement de l'Oauth2 si valide
SI Token_G.Valide ALORS
Sérialise(Token_G,bufToken,psdBinaire)
fSauveBuffer(sGmailPersistantOauth, bufToken)
FIN
SINON
// Fichier inexistant alors on connecte à la page d'identification de Gmail...
MaOauth2_G.ClientID = "1111-3qcnspmjf5gkql8qhtcon806fbjlmpv8.apps.googleusercontent.com"
MaOauth2_G.ClientSecret = "xxxxx-8BLuuytHwgoV1Yg"
MaOauth2_G.URLAuth = "https://accounts.google.com/o/oauth2/v2/auth"
MaOauth2_G.URLToken = "https://accounts.google.com/o/oauth2/token"
MaOauth2_G.Scope = "https://mail.google.com"//"https://www.googleapis.com/auth/gmail.send"
MaOauth2_G.URLRedirection = "http://localhost:9000"
MaOauth2_G.TypeRéponse = oauth2TypeRéponseCode
Token_G = AuthIdentifie(MaOauth2_G)
// Enregistrement de l'Oauth2 si valide
SI Token_G.Valide ALORS
Sérialise(Token_G,bufToken,psdBinaire)
fSauveBuffer(sGmailPersistantOauth, bufToken)
SINON
Erreur("Échec de connexion à l'OAuth2")
FIN
FIN
FIN
//------------------------------------------------------- Fin de la gestion OAuth2 pour Gmail

MaSession est un emailSessionSMTP
i est un entier
AdresseTemp est une chaîne
clEmail est un Email
EmailParamètre(emailParamètreMode, 1)

// Vérification de la présence d'un objet pour cet Email
SI OBJET_MEL = "" ALORS
Info("L'objet de cet Email est absent...")
RepriseSaisie(OBJET_MEL)
FIN

//Affectations des variables d'envoi d'eMail :
clEmail.AdresseExpéditeur = ADRESSE_MEL
clEmail.Expediteur = ADRESSE_MEL
Ajoute(clEmail.Destinataire, DESTINATAIRE)
clEmail.Sujet = OBJET_MEL
clEmail.Message = MESSAGE_MEL
clEmail.ConfirmationLecture = AR_EMAIL

//Traitement des CC
i = 1
BOUCLE
AdresseTemp = ExtraitChaîne(COPIE,i,";")
SI AdresseTemp <> EOT ALORS
Ajoute(clEmail.Cc,AdresseTemp)
i++
SINON
SORTIR
FIN
FIN

// Ouverture d'une session SMTP sécurisée
MaSession..AdresseServeur = SERVEUR_SMTP
SI SESSION_MEL=0 ALORS
MaSession..Option = optionSSL
SINON
MaSession..Option = emailOptionSécuriséTLS
FIN
MaSession..Port = PORT_MEL//iNUM_TLS
MaSession..Nom = ADRESSE_MEL
MaSession..MotDePasse = MDP_MEL//PASSE_MAIL
SI gnFlag_Gmail=1 ALORS MaSession.AuthToken = Token_G //AuthIdentifie(MaOauth2_G)
// 10 secondes pour le time out
EmailChangeTimeOut(10)
//Traitement des pièces jointes
TEST_NBRE est un entier = TABLE_ATTACH..Occurrence
SI TEST_NBRE>0 ALORS
POUR i = 1 _À_ TABLE_ATTACH..Occurrence
EmailChargeFichierAttaché(clEmail,TABLE_ATTACH.CHEMIN1[i])
FIN
FIN

ToastAffiche("Envoi de l'Email en cours",toastLong,cvMilieu,chCentre,BleuPastel)
//Ouverture de session SMTP
SI EmailOuvreSession(MaSession) ALORS
//Envoi du message.
SI EmailEnvoieMessage(MaSession,clEmail) ALORS
ToastSupprimeTout()
ToastAffiche("Votre Email a été envoyé avec succès, vous pouvez fermer la fenêtre.",toastLong,cvMilieu,chCentre,VertPastel)
FIN
SINON
Erreur("Échec dans l'envoi de cet Email")
FIN
ToastSupprimeTout()
Ferme(FEN_IMel_1,VRAI)


--
Patrick PELISSON
Membro registado
98 mensagems
Popularité : +2 (2 votes)
Publicado em junho, 01 2022 - 11:01 AM
RE,

Une petite précision sur le code du précédent message...
Token_G est un AuthToken est déclaré dans le code du projet, à l'initialisation car j'ai plusieurs fenêtres du projet qui envoient des Mail. Si vous n'avez qu'une fenêtre d'envoi d'Email, vous pouvez le déclarer en début du code sous le bufToken...
A+

--
Patrick PELISSON
Publicado em junho, 01 2022 - 1:24 PM
De votre expérience la validation de votre application auprès de google
a-t-elle été compliquée ?

merci

eric l.

> Le 01/06/2022 à 08:54, Patrick PELISSON a écrit :
Bonjour,

Voici le code qui se trouve dans le bouton [envoyer] de ma fenêtre
Email. Cela fonctionne et ne redemande pas systématiquement un
reconnexion à la fenêtre authentification de Gmail .
Cela ne vous empêchera pas de faire valider votre application par
Google... alors bon courage et pas mal de patience.
//
============================================================================

SI gnFlag_Gmail=1 ALORS                              // Présence d'une
adresse Gmail alors procédure OAuth2
//------------------------------------------------------------------------------


    sGmailPersistantOauth    est une chaîne    =
fRepDonnées()+[fSep]+"AuthSession_G.bin"
    bufToken est un Buffer
    MaOauth2_G                est un
OAuth2Paramètres                    // Service Oauth

    // Token_G est existant
    SI fFichierExiste(sGmailPersistantOauth) = Vrai ALORS
        //QUAND EXCEPTION DANS
            bufToken = fChargeBuffer(sGmailPersistantOauth)
            Désérialise(Token_G,bufToken,psdBinaire)
            SI (Token_G.DateExpiration-1min Token_G.Actualisation<>"" ALORS    Token_G = Token_G.RenouvelleToken()
                // Enregistrement de l'Oauth2 si valide
            SI Token_G.Valide ALORS
                Sérialise(Token_G,bufToken,psdBinaire)
                fSauveBuffer(sGmailPersistantOauth, bufToken)
            FIN
    SINON
        // Fichier inexistant alors on connecte à la page
d'identification de Gmail...
        MaOauth2_G.ClientID            =
"1111-3qcnspmjf5gkql8qhtcon806fbjlmpv8.apps.googleusercontent.com"
        MaOauth2_G.ClientSecret        = "xxxxx-8BLuuytHwgoV1Yg"
        MaOauth2_G.URLAuth            =
"https://accounts.google.com/o/oauth2/v2/auth"
        MaOauth2_G.URLToken            =
"https://accounts.google.com/o/oauth2/token"
        MaOauth2_G.Scope            =
"https://mail.google.com"//"https://www.googleapis.com/auth/gmail.send"
        MaOauth2_G.URLRedirection    = "http://localhost:9000"
        MaOauth2_G.TypeRéponse        = oauth2TypeRéponseCode
        Token_G = AuthIdentifie(MaOauth2_G)
        // Enregistrement de l'Oauth2 si valide
        SI Token_G.Valide ALORS
            Sérialise(Token_G,bufToken,psdBinaire)
            fSauveBuffer(sGmailPersistantOauth, bufToken)
            SINON
            Erreur("Échec de connexion à l'OAuth2")
        FIN
    FIN
FIN
//------------------------------------------------------- Fin de la
gestion OAuth2 pour Gmail

MaSession     est un emailSessionSMTP
i            est un entier
AdresseTemp    est une chaîne
clEmail        est un Email
EmailParamètre(emailParamètreMode, 1)

// Vérification de la présence d'un objet pour cet Email
SI OBJET_MEL = "" ALORS
    Info("L'objet de cet Email est absent...")
    RepriseSaisie(OBJET_MEL)
FIN

//Affectations des variables d'envoi d'eMail :
clEmail.AdresseExpéditeur = ADRESSE_MEL
clEmail.Expediteur = ADRESSE_MEL
Ajoute(clEmail.Destinataire, DESTINATAIRE)
clEmail.Sujet = OBJET_MEL
clEmail.Message = MESSAGE_MEL
clEmail.ConfirmationLecture = AR_EMAIL

//Traitement des CC
i = 1
BOUCLE
    AdresseTemp = ExtraitChaîne(COPIE,i,";")
    SI AdresseTemp <> EOT ALORS
        Ajoute(clEmail.Cc,AdresseTemp)
        i++
    SINON
        SORTIR
    FIN
FIN

// Ouverture d'une session SMTP sécurisée MaSession..AdresseServeur =
SERVEUR_SMTP
SI SESSION_MEL=0 ALORS
    MaSession..Option = optionSSL
SINON
    MaSession..Option = emailOptionSécuriséTLS
FIN
MaSession..Port            = PORT_MEL//iNUM_TLS
MaSession..Nom            =  ADRESSE_MEL
MaSession..MotDePasse    = MDP_MEL//PASSE_MAIL
SI gnFlag_Gmail=1 ALORS MaSession.AuthToken            = Token_G
//AuthIdentifie(MaOauth2_G)
// 10 secondes pour le time out
EmailChangeTimeOut(10)
//Traitement des pièces jointes
TEST_NBRE est un entier = TABLE_ATTACH..Occurrence
SI TEST_NBRE>0 ALORS     POUR i = 1 _À_ TABLE_ATTACH..Occurrence
        EmailChargeFichierAttaché(clEmail,TABLE_ATTACH.CHEMIN1[i])
    FIN
FIN

ToastAffiche("Envoi de l'Email en
cours",toastLong,cvMilieu,chCentre,BleuPastel)
//Ouverture de session SMTP
SI EmailOuvreSession(MaSession) ALORS
    //Envoi du message.
    SI EmailEnvoieMessage(MaSession,clEmail) ALORS
        ToastSupprimeTout()
        ToastAffiche("Votre Email a été envoyé avec succès, vous pouvez
fermer la fenêtre.",toastLong,cvMilieu,chCentre,VertPastel)
    FIN
SINON
    Erreur("Échec dans l'envoi de cet Email")
FIN
ToastSupprimeTout()
Ferme(FEN_IMel_1,Vrai)


--
Patrick PELISSON
Membro registado
98 mensagems
Popularité : +2 (2 votes)
Publicado em junho, 01 2022 - 3:46 PM
Bonjour Eric,

Mon Appli à été validée par Google pour une synchronisation avec Google Calendar.
Ils m'ont demandé une vidéo du cheminement dans mon appli, de son ouverture à la synchronisation des calendriers. Pénible pour 2 raisons :
- Il faut tout documenter en anglais...
- Ils réclament souvent des précisions sur l'accès Https utilisé alors même que mon appli tourne en local ;( (5 A/R avant qu'ils le comprennent)
Par contre, une fois le dossier d'habilitation engagée, ils répondent rapidement.

Je vais engager la procédure pour Gmail mais j'hésite de le faire dès maintenant car je n'ai besoin que du 'Send' et le Scope actuel de WD27 ne fonctionne qu'avec Gmail complet. Je vais attendre quelques jour pour voir si un correctif est réalisé par PCSoft.

--
Patrick PELISSON
Publicado em junho, 02 2022 - 10:16 AM
Nous sommes exactement dans le meme cas que toi.
Validation ok pour calendar de longue date et le scope en cours pour
gmail me refroidit, la doc de google est plutôt claire, on est dans un
niveau d'accès "Restricted" qui demande une validation "poussée" (au
lieu d'un niveau d'accès "Sensitive")... Je n'ai pas trop envie de me
tirer une balle dans le pied ^^

Merci pour le retour ;)

eric l.

> Le 01/06/2022 à 13:46, Patrick PELISSON a écrit :
Bonjour Eric,

Mon Appli à été validée par Google pour une synchronisation avec Google
Calendar.
Ils m'ont demandé une vidéo du cheminement dans mon appli, de son
ouverture à la synchronisation des calendriers. Pénible pour 2 raisons :
- Il faut tout documenter en anglais...
- Ils réclament souvent des précisions sur l'accès Https utilisé alors
même que mon appli tourne en local ;( (5 A/R avant qu'ils le comprennent)
Par contre, une fois le dossier d'habilitation engagée, ils répondent
rapidement.

Je vais engager la procédure pour Gmail mais j'hésite de le faire dès
maintenant car je n'ai besoin que du 'Send' et le Scope actuel de WD27
ne fonctionne qu'avec Gmail complet. Je vais attendre quelques jour pour
voir si un correctif est réalisé par PCSoft.

--
Patrick PELISSON
Membro registado
98 mensagems
Popularité : +2 (2 votes)
Publicado em junho, 07 2022 - 4:40 PM
Bonjour Eric,

Je penses avoir trouver une solution alternative...
Les utilisateurs de mon application qui ont une adresse Gmail vont devoir remplacer leur mot de passe personnel pour leur adresse Gmail par un mot de passe généré par Google (Mot de passe d'une application) qui s'obtient très facilement depuis la page sécurité du compte Google. Rien à modifier dans mon code, c'est à l'utilisateur de générer son mot de passe de l'application et de le substituer à son mot de passe Gmail dans mon appli...
Un tuto en ligne est très bien dans un autre sujet similaire...

--
Patrick PELISSON
Publicado em junho, 07 2022 - 5:57 PM
Bonjour

Pouvez-vous nous donner le lien vers ce tuto ?
J'ai le même soucis avec mes applications

Merci beaucoup !
Membro registado
98 mensagems
Popularité : +2 (2 votes)
Publicado em junho, 07 2022 - 10:33 PM
Voici l'adresse du tuto...

Cela fonctionne super et l'obtention de ce mot de passe 'application' est très facile à obtenir pour les utilisateurs...
Dans ce forum, le sujet est : 'Envoie emails smpt'
Cordialement

--
Patrick PELISSON
Publicado em junho, 08 2022 - 1:57 PM
+1 nous avons fait de même sur nos applications.... et avec une incitation à passer sur une adresse email pro (domaine ou fournisseur respectueux des standards).

Par contre j'en profite, est ce que l’accès OAUTH2 est vraiment gratuit ? il me semble qu'il y a une limite d'utilisateur.
Source : https://www.pmail.com/devnews.htm
Membro registado
98 mensagems
Popularité : +2 (2 votes)
Publicado em junho, 08 2022 - 10:19 PM
Je pense que pour Google, il est gratuit mais limité à 100 connexions d'adresses Gmail différentes tant que l'application n'a pas été 'homologuée' par Google...
Tant que cela fonctionne, le principe du mot de passe 'Application' délivré par Google et qui vient se substituer au mot de passe de l'utilisateur est la solution la plus facile à mettre en place !

--
Patrick PELISSON
Publicado em novembro, 23 2022 - 11:39 AM
Bonjour
j'ai réussi à faire fonctionner avec Gmail la double authentification avec le mot de passe application de Google pour l'envoi de mail.
du coup, j'ai une page web avec mon compte gmail qui me demande mon mot de passe afin de certifier que je suis bien l'expéditeur du message. Ok
ma question est : comment faire de même lors d'un appel à un web service car le mail expéditeur du mail ne sera quant à lui pas connecté au moment de l'appel à ce service ?
Merci
Membro registado
9 mensagems
Popularité : +1 (1 vote)
Publicado em setembro, 27 2023 - 4:21 AM
Salut Damien,

Dans la variable OAuth2Params est un Oauth, ajoute

OAuth2Params.ParamètresSupplémentaires = "access_type=offline"


Cela te retournera un jeton d'actualisation dans ta variable
MonToken.actualisation



PS : Tu peux aussi vérifier, avant toute intervention, si ton token est toujours opérationnel en cas de révocation de l'utilisateur depuis son compte Google :
https://www.googleapis.com/oauth2/v1/tokeninfo…

Je pense qu'il y a moyen d'utiliser les fonctions Google de webdev (ex: GglListeAgenda ect..) par la suite, mais j'suis encore de potasser le truc.