PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → TOKEN pour connexion office 365
TOKEN pour connexion office 365
Débuté par Laurent CM, 10 aoû. 2017 12:35 - 16 réponses
Membre enregistré
37 messages
Popularité : +1 (1 vote)
Posté le 10 août 2017 - 12:35
Bonjour à tous.
Je dois intégrer dans mon application la gestion d'un agenda office 365.
J'utilise pour cela une variable de type OAuth2Paramètres, elle est correctement renseignée et j'obtiens une réponse de la part de Microsoft qui contient un token que j'utilise pour gérer mon agenda.
Mon problème est que ce token reçu est de type access_token et qu'il expire après une heure de temps.
Je souhaiterais obtenir avec cet access_token , un refresh_token qui me permettrait de continuer à inter agir sur l'agenda sans redemander l'identification à l'utilisateur.
Quelqu'un a il une idée pour résoudre ce pb ?

Merci.

--
Cordialement
Membre enregistré
2 566 messages
Popularité : +222 (260 votes)
Posté le 10 août 2017 - 13:05
Bonjour,

Il te faut rajouter le scope offline_access pour avoir le refresh_token

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membre enregistré
37 messages
Popularité : +1 (1 vote)
Posté le 10 août 2017 - 14:15
Merci Philippe pour la réponse,
avec
:m_ParamIdentification.Scope ="https://outlook.office.com/calendars.readwrite&offline_access"

où m_ParamIdentification est de type OAuth2Paramètres

mais rien n'y fait j'ai toujours ceci comme réponse :
{
"token_type":"Bearer",
"scope":"https:\/\/outlook.office.com\/Calendars.Read https:\/\/outlook.office.com\/Calendars.Read.Shared https:\/\/outlook.office.com\/Calendars.ReadWrite https:\/\/outlook.office.com\/Contacts.ReadWrite",
"expires_in":3599,
"ext_expires_in":262800,
"access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IlZXVkljMVdEMVRrc2JiMzAxc2FzTTVrT3E1USIsImtpZCI6IlZXVkljMVdEMVRrc2JiMzAxc2FzTTVrT3E1USJ9.eyJhdWQiOiJodHRwczovL291dGxvb2sub2ZmaWNlLmNvbSIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0L2RhODI4NzdmLTEyYWQtNDMyNy05NjY0LTE4M2FiZmZmNjRkMi8iLCJpYXQiOjE1MDIzNjY3MDgsIm5iZiI6MTUwMjM2NjcwOCwiZXhwIjoxNTAyMzcwNjA4LCJhY3IiOiIxIiwiYWlvIjoiQVNRQTIvOEVBQUFBZFk1eUd1QUptY0c5azRxYmNzL3U0TmZZbVZLWEhjZmRHakM1WjVSVzR0dz0iLCJhbXIiOlsicHdkIl0sImFwcGlkIjoiZDIxNzQxM2ItMTQ0MC00MjIyLThhN2ItMTI4NjY4ZjIyYTJlIiwiYXBwaWRhY3IiOiIxIiwiZV9leHAiOjI2MjgwMCwiZW5mcG9saWRzIjpbXSwiZmFtaWx5X25hbWUiOiJDSEFVVkVUIE1PVEVBVSIsImdpdmVuX25hbWUiOiJMYXVyZW50IiwiaXBhZGRyIjoiOTEuMjExLjE2Ny4yMjUiLCJuYW1lIjoiTGF1cmVudCBDSEFVVkVUIE1PVEVBVSIsIm9pZCI6IjQzY2NlMmJmLTMwMDMtNDlkMy05M2M3LTczYWM0MWEyNGZjNiIsIm9ucHJlbV9zaWQiOiJTLTEtNS0yMS02MDIxNjIzNTgtMTM4MzM4NDg5OC04NTQyNDUzOTgtMjY2NjUiLCJwbGF0ZiI6IjMiLCJwdWlkIjoiMTAwMzAwMDA4QzE2RjgzRiIsInNjcCI6IkNhbGVuZGFycy5SZWFkIENhbGVuZGFycy5SZWFkLlNoYXJlZCBDYWxlbmRhcnMuUmVhZFdyaXRlIENvbnRhY3RzLlJlYWRXcml0ZSIsInN1YiI6Ilczc3pWNDhOV2puQmtPTmFRMjF1YzVCWTg4X01rQmNweTJfY1NZM2RIY28iLCJ0aWQiOiJkYTgyODc3Zi0xMmFkLTQzMjctOTY2NC0xODNhYmZmZjY0ZDIiLCJ1bmlxdWVfbmFtZSI6ImwuY2hhdXZldG1vdGVhdUBhbmlrb3AuY29tIiwidXBuIjoibC5jaGF1dmV0bW90ZWF1QGFuaWtvcC5jb20iLCJ2ZXIiOiIxLjAifQ.Mc7QVBq0_dfOL-cynbT2UTjlVOfbgaNSdUvKAOG_mqqVkypKFzz-qR0yQPI0JGfaj32M-sU_0rjPkMxruJaTnQhzLDN9R2JDfYg_seOmbnkiuwlccF1PkCjLqasSB6Ft1aVWxt-FJRkFnY2fsI5PeMW_BbfjfuZ4PyoVimZmYl6T6WKFN0nv8xsaMNfaV4TleoOe0RT_yGnOGzZuPXOaQ_a7cXAJDqepAqF8t4WV1KYilZONIBOZU0cAKRBrFNsl16CLDEJQj55z-O3mNLzFQz8sfB_2imeMj8Y_3xY_C8QrMhJ6Jj0V-szQE48S28-Sgtail-j1EkLEEkRuINKGrQ"
}

--
Cordialement
Membre enregistré
2 566 messages
Popularité : +222 (260 votes)
Posté le 10 août 2017 - 15:14
Moi j'envoie ça comme scope par exemple
clOauth.Scope = "offline_access User.Read"


essaye de le mettre en premier scope pour voir si ça change quelque chose

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membre enregistré
37 messages
Popularité : +1 (1 vote)
Posté le 10 août 2017 - 15:22
Un GRAND Philippe, ça fonctionne j'ai enfin mon refresh_tokken
:merci:

--
Cordialement
Membre enregistré
37 messages
Popularité : +1 (1 vote)
Posté le 10 août 2017 - 15:31
Laurent CM a écrit :
Un GRAND Philippe, ça fonctionne j'ai enfin mon refresh_tokken


--
Cordialement

Je crois que le MERCI était tellement grand qu'il ne rentrait pas, je l'ai donc réduit un peu pour qu'il puisse s'afficher ;)

--
Cordialement
Membre enregistré
37 messages
Popularité : +1 (1 vote)
Posté le 11 août 2017 - 12:03
Bonjour,
nouvelle petite question sur la suite du refresh token,
grâce à Philippe j'ai bien obtenu les informations du refresh token dans la demande d'access_token, mais quand il s'agit d'obtenir un nouveau jeton avec le refresh j'ai l'erreur suivante :
{
"error":"invalid_grant",
"error_description":"AADSTS70000: Transmission data parser failure: Refresh Token is malformed or invalid.\r\nTrace ID: 26fdf995-9864-4a62-8d1a-94cf48e00400\r\nCorrelation ID: 0b1c29b5-3a0a-44e0-9b3d-1365b3015a61\r\nTimestamp: 2017-08-11 08:38:15Z",
"error_codes":[70000],
"timestamp":"2017-08-11 08:38:15Z",
"trace_id":"26fdf995-9864-4a62-8d1a-94cf48e00400",
"correlation_id":"0b1c29b5-3a0a-44e0-9b3d-1365b3015a61"
}

Voici le code que j'utilise pour obtenir le nouveau token

HTTPAnnuleFormulaire("REFRESH_TOKEN")
HTTPCréeFormulaire("REFRESH_TOKEN")
HTTPAjouteParamètre("REFRESH_TOKEN","grant_type","refresh_token")
HTTPAjouteParamètre("REFRESH_TOKEN","refresh_token",:m_Token_REFRESH.Valeur)
HTTPAjouteParamètre("REFRESH_TOKEN","client_id",:m_ParamIdentification.ClientID)
HTTPAjouteParamètre("REFRESH_TOKEN","client_secret",:m_ParamIdentification.ClientSecret)
HTTPAjouteParamètre("REFRESH_TOKEN","ressource",:m_ParamIdentification.URLRedirection)

bRéponse = HTTPEnvoieFormulaire("REFRESH_TOKEN","HTTPS://login.windows.net/common/oauth2/token",httpPost,"","")

Si quelqu'un a une idée ?

Merci

--
Cordialement
Membre enregistré
2 566 messages
Popularité : +222 (260 votes)
Posté le 11 août 2017 - 14:21
Bonjour,

Tout d'abord, je pense qu'il y a un "s" de trop à resource. Ensuite je pense que resource doit correspondre à resource reçu dans le access_token.

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membre enregistré
37 messages
Popularité : +1 (1 vote)
Posté le 16 août 2017 - 13:07
Bonjour Philippe,
j'ai corrigé "resource" et j'ai même supprimé cette information dans le formulaire, mais rien n'y fait j'ai toujours la même erreur.
J'ai pris ce code dans le projet du webinaire. J'ai même tenté comme dans le code initial de passer les paramètres en mode ChaîneVersUTF8, sans plus de résultat.

Je sèche....

--
Cordialement
Membre enregistré
2 566 messages
Popularité : +222 (260 votes)
Posté le 16 août 2017 - 13:31
Bonjour Laurent,

Sauf erreur de ma part, les points de terminaisons pour la connexion aux api en mode REST chez Microsoft sont les suivants (https://msdn.microsoft.com/en-us/office/office365/api/use-outlook-rest-api)
https://login.microsoftonline.com/common/oauth2/v2.0/authorize
https://login.microsoftonline.com/common/oauth2/v2.0/token


Voici une page où tout n'est pas trop mal expliqué (https://developer.microsoft.com/fr-fr/graph/docs/concepts/auth_v2_user). Je dois avouer que la doc de chez Microsoft est assez brouillon et qu'il faut chercher un peu partour pour trouver une info. C'est la page la plus complète que j'ai trouvé et qui m'a servi à développer ma classe pour les connexions oAuth.

La connexion oAuth de Windev est trop limitée et ne permet pas tout. Il est plus simple de passer par des Requete http. Si tu as besoin d'un peu plus d'infos n'hésite pas.

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membre enregistré
37 messages
Popularité : +1 (1 vote)
Posté le 16 août 2017 - 13:41
Je te remercie Philippe pour ces informations.
Je vais étudier tout ça et reviendrais le cas échéant vers toi si je n'y arrive pas.
Merci pour ton aide

--
Cordialement
Membre enregistré
37 messages
Popularité : +1 (1 vote)
Posté le 16 août 2017 - 13:56
C'était bien l'adresse de destination du formulaire qui n'était pas la bonne, j'ai simplement remplacé

bRéponse = HTTPEnvoieFormulaire("REFRESH_TOKEN","https://login.microsoftonline.com/common/oauth2/token",httpPost,"","")

par

bRéponse = HTTPEnvoieFormulaire("REFRESH_TOKEN","https://login.microsoftonline.com/common/oauth2/v2.0/token",httpPost,"","")

et j'ai eu une réponse correcte avec un nouveau jeton.

Merci Philippe pour ton aide précieuse.

--
Cordialement
Posté le 23 avril 2018 - 14:29
Bonjour
pourrait-on avoir votre code qui vous permet de demander la première autorisation ?
car moi j'essaye sur l'API de one drive et je n'obtiens toujours que le token, jamais le code qui permet de redemander un token
Par contre dans le navigateur qui s'ouvre je vois mon url de redirection avec comme paramêtre ce qui semble être le code dont j'ai besoin pour faire un refresh de token
http://localhost:9000/…

mais dans ma variable AuthToken j'obtiens toujours ceci:
{"token_type":"bearer","expires_in":3600,"scope":"wl.offline_access wl.basic","access_token":"EwAYA61DBAAUcSSzoTJJsy+XrnQXgAKO5cj4yc8AAcPqoCn0HPlZ2etK5nqRdjaqIPS68Pb7SnIW8Cw8OmGDo6I5luxmeQ03ZY8ndandLTUkfMXRjyroqItmBJ10aoPUu3Fux9fQ2w4I4..."}

Merci à vous
Membre enregistré
37 messages
Popularité : +1 (1 vote)
Posté le 23 avril 2018 - 15:39
Bonjour,
voici le code que j'utilise :
m_ParamIdentification est un OAuth2Paramètres
TOKEN_MICROSOFT est un AuthToken

:m_ParamIdentification.URLAuth = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize"
:m_ParamIdentification.URLToken = "https://login.microsoftonline.com/common/oauth2/v2.0/token"
:m_ParamIdentification.ClientID = "xx
:m_ParamIdentification.ClientSecret = "xx"
:m_ParamIdentification.URLRedirection = "http://localhost:9874"

TOKEN_MICROSOFT = AuthIdentifie(:m_ParamIdentification)
SI TOKEN_MICROSOFT.Valide = Faux ALORS
:mtd_Trace("Demande de Token refusée par microsoft")
:mtd_Trace("motif : " + RC + TOKEN_MICROSOFT.RéponseServeur)
:mtd_Trace("_-¯")
RENVOYER Faux
SINON
// En MODE DEBUG
:mtd_Trace("Demande de Token acceptée")
:mtd_Trace("_-¯")
vTOKEN = JSONVersVariant(TOKEN_MICROSOFT.RéponseServeur)
:m_Token_ACCESS = TOKEN_MICROSOFT
:m_Token_ACCESS.Valeur = vTOKEN.Access_token

:m_Token_REFRESH = TOKEN_MICROSOFT
:m_Token_REFRESH.Valeur = vTOKEN.Refresh_token

:mtd_SauvegardeLeToken( TOKEN_MICROSOFT)
RENVOYER Vrai
FIN

Cordialement

--
Cordialement
Posté le 01 août 2018 - 10:54
Bonjour,
Ce code est-il toujours d'actualité ?
Lorsque je fais
AuthIdentifie
, mon navigateur s'ouvre et me redirige vers la page de mon site.
Je suis obligé de fermer mon navigateur, et de cliquer le bouton "Annuler" de la fenêtre d'authentification.
Je ne récupère donc pas le Token.
Y a-t-il quelque chose que je fais mal ?

Cdt
Greg
Membre enregistré
37 messages
Popularité : +1 (1 vote)
Posté le 01 août 2018 - 12:06
Bonjour,
oui il l'est toujours.
Ton navigateur s'ouvre car l'identification se fait forcément via le navigateur, une fois que tu as rentré ton id et ton mot de passe, un message te dit que tu peux fermer ton navigateur. Et dans ton application tu récupères ton token.

Cordialement

--
Cordialement
Posté le 26 octobre 2022 - 16:54
Bonjour,

Est si l'on veut une authentification transparent sans page de login/mot de passe, je pense a un service de récupération de mail par exemple.
Avez vous une idée sur le sujet ?
Merci