PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Office365 - Popup Connexion
Office365 - Popup Connexion
Débuté par Martin, 10 déc. 2018 10:07 - 5 réponses
Membre enregistré
5 messages
Posté le 10 décembre 2018 - 10:07
Bonjour à tous,

En ce moment je travaille sur un projet d'application permettant de récupérer des infos d'Office 365 grâce à Microsoft Graph afin de créer des signatures mail
Mon programme fonctionne correctement, j'arrive bien à récupérer les différentes informations.

Seulement, quand j'utile ma fonction AuthIdentifie(NomDeMaConnexion), je souhaiterai que ce soit une toute petite popup qui s'ouvre et non le navigateur entier
J'ai beau chercher mais comme c'est mon premier projet utilisant des api, je n'arrive pas à trouver la solution à mon problème..

Est-ce que quelqu'un saurait m'aider ?
Merci d'avance !


PS : Un exemple est disponible sur une vidéo de PC SOFT postée sur Youtube, "Comment utiliser les API Office 365 dans vos application" à 5min00. Mais en ouvrant l'exemple dans windev, je n'ai pas cette popup là
Membre enregistré
5 messages
Posté le 12 décembre 2018 - 15:30
Petit up ?
Posté le 12 décembre 2018 - 16:13
Bonjour,
Moi aussi je cherche comment le desctiver avec le calendrier du google ,j'avais le popup avec la version 20 mais quand j'ai migré vers le 22 ou le 23 j'avais cette identification dans le navigateur .
Membre enregistré
5 messages
Posté le 08 janvier 2019 - 10:55
Réponse à moi même pour apporter la solution que j'ai trouvé, en espérant que ça puisse aider

Ne trouvant rien de spécifique concernant ce sujet, j'ai décidé de créer une fenêtre Windev avec un champ html, initialisé avec le lien permettant d'avoir le code d'autorisation pour Office365. Je traite ensuite ce code d'autorisation directement dans le code du champ HTML afin d'aller récupérer mon token, et ensuite je ferme la fenêtre de connexion.

Cette solution ne marche que pour Windows 7 ,8 & 10 malheureusement, le champs HTML n'affichant pas la page de connexion sur les versions antérieures. (Pour les versions antérieures à Windows 7, j'utilise AuthIdentifie() )
Membre enregistré
5 messages
Posté le 08 janvier 2019 - 13:47
Voici donc le code de mon champ HTML (il n'y a pas de code ailleurs)
Mes connaissances étant limités dans le domaine, ce n'est surement pas très propre. Mais en tout cas ça marche :p

Dans le code d'initialisation
HTM_PageConnexion = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?&client_id=MON_ID&scope=SCOPE_AUTORISATION&response_type=code&response_mode=query&redirect_uri=REDIRECTION&grant_type=authorization_code"


Dans le code "Fin de chargement du document HTML"
//On regarde si la page renvoyée donne le code d'autorisation
SI Contient(HTM_PageConnexion..Valeur,"code=") = Vrai ALORS

//On extrait le code d'autorisation de la chaîne
sMonCode est une chaîne = ExtraitChaîne(HTM_PageConnexion..Valeur,2,"code=")
sMonCode = ExtraitChaîne(sMonCode,1,"&")

//Requête contenant le code d'autorisation, pour récupérer le token
MaRequête est une httpRequête
MaRequête.Méthode = httpPost
MaRequête.URL = "https://login.microsoftonline.com/common/oauth2/v2.0/token"
MaRequête.ContentType = "application/x-www-form-urlencoded"
MaRequête.Contenu = "client_id=MON_ID&code="+sMonCode+"&scope=SCOPE_AUTORISATION&response_type=code&response_mode=query&redirect_uri=REDIRECTION&grant_type=authorization_code"
MAReponseHTTP est une httpRéponse = HTTPEnvoie(MaRequête)

SI MAReponseHTTP..CodeEtat = 200 ALORS

Connexion est une OAuth2Paramètres
Connexion..ClientID = MON_ID
Connexion..ClientSecret = MON_MDP
Connexion..URLAuth = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize"
Connexion..URLToken = "https://login.microsoftonline.com/common/oauth2/v2.0/token"
Connexion.Scope = SCOPE_AUTORISATION

MonToken est un AuthToken(Connexion,MAReponseHTTP.Contenu)
gsMonTokenO365 <= MonToken
FIN

//On ferme la fenêtre de connexion
Ferme()
FIN


Et pour tester si on doit utiliser cette identification ou pas, en fonction de la version de windows
SI SysVersionWindows() = "10" OU SysVersionWindows() = "8" OU SysVersionWindows() = "7" ALORS
//On ouvre l'identification dans ma popup avec le champ HTML
Ouvre(FEN_CONNEXION)
SINON
//On utilise l’identification classique, qui ouvre le navigateur internet de l'utilisateur
Connexion est une OAuth2Paramètres
Connexion..ClientID = MON_ID
Connexion..ClientSecret = MON_MDP
Connexion..URLAuth = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize"
Connexion..URLToken = "https://login.microsoftonline.com/common/oauth2/v2.0/token"
Connexion.Scope = SCOPE_AUTORISATION

gsMonTokenO365 = AuthIdentifie(Connexion)

Le but étant, peu importe la méthode, de finir avec le token contenu dans la variable gsMonTokenO365

En espérant que ça serve, et si vous avez des conseils d'amélioration je suis preneur ! :merci:

PS : Les mots en majuscule sont des variables propres à chacun
Message modifié, 08 janvier 2019 - 13:57
Membre enregistré
20 messages
Posté le 03 mai 2022 - 11:00
y'a des choses à adapter (ajouter le client secret s'il s'agit d'une web app, modifier l'url "https://login.microsoftonline.com/common/oauth2/v2.0/token" en remplaçant le common par un tenant id ou organisations ou autre suivant le cas mais la solution fonction.
Par contre, GROS POINT à préciser: le champ HTML doit être mis en mode "activeX" le moteur interne html de windev ne gère pas la redirection que fait le service d'authentification.
merciiiii en tout cas, ça fonctionne :)