PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → OAuth2 grant_type=password
OAuth2 grant_type=password
Débuté par franck.lamy, 20 déc. 2017 11:48 - 9 réponses
Posté le 20 décembre 2017 - 11:48
Bonjour,

Nous développons des services REST en java. Ceux-ci sont sécurisés à l'aide de OAuth2.
Nous souhaitons utiliser Windev côté client afin de développer nos IHM(s).
Conformément à OAuth2, nous pouvons utiliser la méthode "Autorisation avec les identifiants du propriétaire de la ressource : Resource Owner Password Credentials Grant" car le serveur d’autorisation et le client (windev) sont développés par notre société donc la même entité.

Nous avons fait des tests avec Windev afin de récupérer le token mais rien ne marche !
Oauth2Params est un OAuth2Paramètres
Oauth2Params..ClientID = "windev-client"
Oauth2Params..ClientSecret="password"
Oauth2Params..URLToken = "https://localhost:9191/uaa/oauth/token"
Oauth2Params..Scope ="read"
// grant_type ?????????????
monToken est un AuthToken = AuthIdentifie(Oauth2Params)
Trace("Token : " + monToken)

et d'autres tests infructueux !

La fonction AuthIdentifie essaie d'ouvrir une fenêtre d’identification de l’utilisateur conformément au protocole OAuth 2.0 (cf doc) : attente permanente ! .
Ce n'est pas le comportement que nous souhaitons.
Comment lui préciser d'utiliser le grant_type=password mais de lui fournir également le username/password de l'utilisateur (Resource Owner) qui seront récupérés par notre propre fenêtre de login windev?

Ce type d'autorisation est prévue dans la spécification OAuth2. Cela fonctionne parfaitement avec un client java ou un client web mais qu'en est-il en Windev ?

Merci pour vos réponses car nos futurs développement sont conditionnés par le fait que cette fonctionnalité soit prise en charge par windev.
Posté le 15 octobre 2018 - 12:07
Je ne sais pas si vous avez eu la réponse à votre question mais j'ai le même besoin...
Posté le 21 décembre 2018 - 09:48
Bonjour,

Avez-vous obtenu une réponse à votre besoin ?

Merci,
Cyril
Posté le 22 janvier 2019 - 13:08
Même soucis donc je suis preneur également si quelqu'un a une solution
Membre enregistré
405 messages
Posté le 29 avril 2019 - 10:41
Bonjour,
J'ai essayé cette solution mais cela ne fonctionne pas, fenetre qui s'ouvre "En attente de l'authetification" ...
OAuth2Paramsest OAuth2Paramètres
OAuth2Params..ClientID=ClientID
OAuth2Params..ClientSecret=ClientSecret
OAuth2Params..URLToken="https://xxxxxx/token"
OAuth2Params..Scope="all"
OAuth2Params..ParamètresSupplémentaires="grand_type=password&username="+userLogin+"&password="+userPassword

MonTokenest un AuthToken=AuthIdentifie(OAuth2Params)







Il y a aussi cette possibilité trouvé dans l'aide. (https://doc.pcsoft.fr/fr-FR/?1000022220&1000022220)
httpReq est une httpRequête
httpReq..Méthode = httpPost
httpReq..URL = "https://xxxxxxxxxxxx/oauth/token"
httpReq..Utilisateur = sUserID
httpReq..MotDePasse = sUserPassword
httpReq..Contenu = "grant_type=client_credentials"
httpReq..ContentType = "application/x-www-form-urlencoded"

// Exécution de la requête
httpRep est une httpRéponse = HTTPEnvoie(httpReq)

// Récupération du token
SI httpRep..CodeEtat = 200 ALORS
// Déclare les paramètres, nécessaire pour le rafraîchissement du token
oAuth2Param est un OAuth2Paramètres
oAuth2Param..ClientID = sClientID
oAuth2Param..ClientSecret = sClientSecret
oAuth2Param..URLAuth = "https://xxxxxxxxxxxx/oauth/token"
oAuth2Param..URLToken = "https://xxxxxxxxxxxx/oauth/token"

// Initialise le token avec le JSON
MonToken est un AuthToken(oAuth2Param, httpRep..Contenu)
FIN

Dès la première requête j'ai une erreur . Dans le httpRep j’obtiens :
HTTP/1.1 401 Unauthorized
Cache-Control: No-store
Pragma: No-cache
Content-Type: application/json;charset=utf-8
Server: Microsoft-IIS/8.5
WWW-Authenticate: Bearer Error="invalid_client", error_description="Bad client credentials"
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: Post, Get, OPTIONS, Delete
Access-Control-Max-Age: 3600
Access-Control-Allow-Headers: x-requested-with, authorization, Content-Type
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
X-Powered-by: ARR/2.5
X-Powered-by: ASP.NET
Date: Mon, 29 Apr 2019 08:29:38 GMT
Connection: Close
Content-Length: 71


Plusieurs post sur le même soucis, et personne n'a d'idée ??

Merci à vous
BON DEV
Posté le 29 mai 2019 - 18:10
Comme ça c'est bon chez moi :

sClientID est une chaîne = "xxxx"
sClientSecret est une chaîne = "yyyy"

httpReq est une httpRequête
httpReq..Méthode=httpPost
httpReq..URL="https://.../oauth/token"
httpReq..Contenu="grant_type=client_credentials&client_id="+sClientID+"&client_secret="+sClientSecret
httpReq..ContentType="application/x-www-form-urlencoded"

// Exécution de la requête
httpRep est une httpRéponse=HTTPEnvoie(httpReq)
ToastAffiche(httpRep..CodeEtat)
// Récupération du token
SI httpRep..CodeEtat=200 ALORS
// Déclare les paramètres, nécessaire pour le rafraîchissement du token
oAuth2Param est un OAuth2Paramètres
oAuth2Param..ClientID=sClientID
oAuth2Param..ClientSecret=sClientSecret
oAuth2Param..URLAuth="https://.../oauth/token"
oAuth2Param..URLToken="https://.../oauth/token"

// Initialise le token avec le JSON
MonToken est un AuthToken(oAuth2Param,httpRep..Contenu)
FIN
Membre enregistré
405 messages
Posté le 30 mai 2019 - 10:10
Bonjour,
Merci pour cette réponse, je pense que l'on approche mais on y est pas encore ;( .. car chez moi cela ne fonctionne toujours pas.
En fait dans le code que tu a noté il manque 2 infos pour moi.!

En effet en plus du sClientID et sClientSecret il doit y avoir une authentification sur le post avec sUserID et sUserPassword.

J'ai bien tenté d'ajouter cela à ton code :
httpReq est une httpRequête
httpReq..Méthode =httpPost
httpReq..Utilisateur = sUserID <- ICI
httpReq..MotDePasse = sUserPassword <- ET la !
httpReq..URL ="https://.../oauth/token"
httpReq..Contenu ="grant_type=client_credentials&client_id="+sClientID+"&client_secret="+sClientSecret
httpReq..ContentType ="application/x-www-form-urlencoded"

Mais j'ai toujours un code HTTP/1.1 401 Unauthorized

Pour info en curl la ligne suivante fonctionne.
curl -d "grant_type=password&username=xxxUserxxx&password=xxxPasswordxxx" -u "xxxClientIDxxx:xxxClientSecretxxxx" https://.../oauth/token


BON DEV.
Posté le 03 juin 2019 - 16:43
J'ai testé avec ces lignes en plus ou en moins et je récupère bien le jeton dans les deux cas, comme si elles ne servaient à rien.
httpReq..Utilisateur = sUserID <- ICI
httpReq..MotDePasse = sUserPassword <- ET la !

Cela est peut être dû au service API que je contacte qui n'en a pas besoin.
Membre enregistré
405 messages
Posté le 03 juin 2019 - 17:09
Oui, je pense aussi.
Sur le site qui me me concerne ces identifiants sont obligatoires.
C'est un site sécurisé et ne je peux pas donner les infos ici.

Mais le site fournis les info nécessaire en curl comme je l'ai noté dans le précédent message, il y a 4 identifiant, 2 pour accéder au site et 2 pour le token.
Posté le 08 novembre 2022 - 17:17
Bonjour,

Avez vous eu des infos sur le sujet?
Je suis dans la même situation.
Récupération de mail par IMAP en mode service avec authentification moderne..
Merci