PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Connexion oAuth2 sur un webservice avec authentification Okta
Connexion oAuth2 sur un webservice avec authentification Okta
Débuté par Roumeg, 29 nov. 2025 14:38 - 1 réponse
Membre enregistré
157 messages
Posté le 29 novembre 2025 - 14:38
Bonjour,

auriez vous un code exemple pour vous connecter à un webservice avec authentification Okta ?
Il y a bien un projet exemple pour se connecter à une api google ou windows avec une connexion oAuth2 mais suffit-il d'adapter ces classes juste en changeant les clientid, secret et l'url ?

et j'ai une autre question, si je charge les spec de cette api; on me donne un fichier yaml. Une fois intégré comme une description externe, je n'en vois pas comment l'utiliser comme on pouvait avoir avec les description json.
Bon si je prends un de mes propres webservices, je vois que je peux exporter en openAPI et cela me crée un fichier yaml aussi.

je verrais ça ensuite mais déjà si je pouvais effectuer cette connexion oAuth à okta, ce serait bien.
Merci
Membre enregistré
157 messages
Posté le 29 novembre 2025 - 17:44
Bonjour
bon aidé de mon pote chatgpt, j'ai réussi à faire ce code.
Si cela peut servir à d'autres ...

FUNCTION v2GetoAuth2Token(sTokenURL est une chaîne, sClientID est une chaîne, sClientSecret est une chaîne) : chaîne

cReq est un restRequête
cRep est un restRéponse
sContenu est une chaîne
vJSON est un Variant
sTokenOut est une chaîne = ""

// (optionnel, pour tester les certificats si souci SSL)
// HTTPParamètre(httpParamSSLNoCheck, Vrai)

// 1) Méthode + URL
cReq.Méthode = httpPost
cReq.URL = sTokenURL

// 2) Authentification de type "Basic" gérée par WinDev
// (ça revient à mettre un header Authorization: Basic xxx)
cReq.User = sClientID
cReq.Password = sClientSecret

// 3) Header Content-Type
cReq.Entête["Content-Type"] = "application/x-www-form-urlencoded"

// 4) Corps de la requête (comme dans la doc / comme Postman)
cReq.Contenu = ChaîneVersUTF8("grant_type=client_credentials")

// 5) Envoi
cRep = RESTEnvoie(cReq)

// 6) Gestion erreur système WinDev
SI ErreurDétectée() ALORS
// Là tu verras enfin le VRAI message (SSL, DNS, timeout, etc.)
Info("Erreur RESTEnvoie : " + ErreurInfo(errComplet))
RENVOYER ""
FIN

// 7) Récupération du JSON
sContenu = cRep.Contenu

SI sContenu = "" ALORS
Info("Réponse vide du serveur OAuth2 : " + cRep.CodeEtat)
RENVOYER ""
FIN

// 8) Parse JSON
vJSON = JSONVersVariant(sContenu)

// 9) Extraction du token
SI vJSON.access_token..Existe ALORS
sTokenOut = vJSON.access_token
SINON
Info("Pas de champ 'access_token' dans la réponse : " + CR + sContenu)
RENVOYER ""
FIN

RENVOYER sTokenOut


et ensuite qd on appelle son point d'accès

restreq est un restRequête
restRéponse est un restRéponse
contenujson est une chaîne
contenu est un Variant


wsUrl est une chaîne
wsUrl="https://xxxx/xxxx/xxxxx/search"
restreq..Méthode = httpGet
restreq..URL = wsUrl
restreq..ContentType = "application/json"
restreq.Entête["Authorization"] = "Bearer "+gToken
restreq.Entête["Accept"] = "application/json"


restRéponse = RESTEnvoie(restreq)
SI ErreurDétectée() ALORS
Info("Erreur RESTEnvoie : " + ErreurInfo(errComplet))
SINON
contenujson=restRéponse..Contenu
contenu=JSONVersVariant(contenujson)
FIN