|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
| Recupérer un token OAuth2 sans ouverture de fenetre de login en Windev27 |
| Débuté par Emmanuel Vitrac, 17 nov. 2025 02:24 - Aucune réponse |
| |
| | | |
|
| |
| Posté le 17 novembre 2025 - 02:24 |
Bonjour, c'est ma premiere tentative de me connecter à une API et recupérer des données.
Je teste pour commencer les différents moyen de récupérer un token en OAuth2.
J'ai essayé avec AuthIdentifie et j'ai réussi a obtenir un toket mais je me rend compte qu'on ne peut pas éviter l'ouvrture d'une page web en WD27. (test 1)
J'essaie donc avec HTTPENVOIE mais j'ai soi une erreur 400 (test2) soit un token vide (test3)
Si une bonne âme pouvait me donner une piste, je ne m'attendais pas à tant de difficulté...
Emmanuel
TEST 1 : //******************AVEC AUTHIDENTIFIE : fenetre de login obligatoire en Windev27, Token OK mais la requete finales ne renvoie rien cMaRequete est un restRequête cMaRequete.URL = "https://shdemo.xpertis.nc/basicdata-api/api/v1/companies"
//HTTPConfigure(httpModeSansFenêtre, True)
OAuth2Params est un OAuth2Paramètres OAuth2Params.ClientID = "srvacc-api" OAuth2Params.ClientSecret = "VvLMkK9zyngaXvJQ0TZraR2EQqxFIWTx" OAuth2Params.URLAuth = "https://keycloak.xpertis.nc/auth/realms/DEMO/protocol/openid-connect/auth" OAuth2Params.URLToken = "https://keycloak.xpertis.nc/auth/realms/DEMO/protocol/openid-connect/token" OAuth2Params.ParamètresSupplémentaires = "force_reapprove=false" OAuth2Params.URLRedirection = "http://localhost:9874/" OAuth2Params.ParamètresSupplémentaires="force_reapprove=false" //Demande d'authentification : ouvre la fenêtre de login
MonToken est un AuthToken = AuthIdentifie(OAuth2Params)
SI PAS MonToken.Valide ALORS Erreur("pb de connexion API "+CR+ErreurInfo(errComplet)) SINON cMaRequete.AuthToken = MonToken // cMaRequete.Utilisateur="admin-sirh@asys.fr" // cMaRequete.MotDePasse="Asys%2023!" cMaReponse est un httpRéponse = RESTEnvoie(cMaRequete) SI ErreurDétectée ALORS Erreur("Pb de requête API : "+CR+ErreurInfo(errComplet)) SINON Info("Résultat code : "+cMaReponse.CodeEtat+CR+"Data : "+cMaReponse.Contenu+CR+"Token : "+MonToken.Valeur) FIN FIN
//****************** TEST2 avec HTTPENVOIE : erreur 400 httpToken_Requete est une httpRequête httpToken_Réponse est une httpRéponse
sCléClient est une chaîne sCléSecret est une chaîne sUtilisateur est une chaîne sMotPasse est une chaîne
sUtilisateur = "admin-sirh@asys.fr" sMotPasse = "Asys%2023!" sCléClient = "srvacc-api" sCléSecret = "VvLMkK9zyngaXvJQ0TZraR2EQqxFIWTx"
httpToken_Requete..Méthode = httpPost httpToken_Requete..URL = "https://keycloak.xpertis.nc/auth/realms/DEMO/protocol/openid-connect/token"
// Construction du contenu de la requête POST avec la chaîne standard // qui concatène toutes les données d'authentification httpToken_Requete..Contenu = "grant_type=password&username="+sUtilisateur+"&password="+sMotPasse+"&client_id="+sCléClient+"&client_secret="+sCléSecret httpToken_Réponse = HTTPEnvoie(httpToken_Requete) // On doit vérifier que httpToken_Réponse..CodeEtat = 200 et traiter les erreurs SI httpToken_Réponse..CodeEtat=200 jToken est un JSON = httpToken_Réponse..Contenu Info(httpToken_Réponse..Contenu) SINON Erreur("Pb de requête API : code erreur = "+httpToken_Réponse..CodeEtat) FIN
//****************** TEST3 avec HTTPENVOIE : token vide sURLToken est une chaîne = "https://keycloak.xpertis.nc/auth/realms/DEMO/protocol/openid-connect/token"
reqToken est un httpRequest reqToken.URL = sURLToken reqToken.Méthode = httpPost reqToken.ContentType = "application/x-www-form-urlencoded"
// Corps du POST OAuth2 reqToken.Contenu = [ grant_type=client_credentials& client_id=srvacc-API& client_secret=VvLMkK9zyngaXvJQ0TZraR2EQqxFIWTx& scope=API.read ]
// Exécuter silencieusement HTTPEnvoie(reqToken) SI PAS ErreurDétectée sJSON est une chaîne = HTTPDonneRésultat() rep est un Variant = JSONVersVariant(sJSON) token est une chaîne = rep.access_token Info(token) SINON Erreur("Erreur OAuth2 : " + ErreurInfo(errComplet)) RETOUR FIN |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|