DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Fonctions WLangage / Communication / Gestion du protocole OAuth 2.0
  • Propriétés spécifiques à la description des variables de type OAuth2Paramètres
  • Fonctionnement de l'authentification OAuth 2.0
  • Authentification PKCE
  • Authentification via "Client Secret Basic"
WINDEV
WindowsLinuxJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac Catalyst
Autres
Procédures stockées
Le type OAuth2Paramètres permet de définir toutes les informations nécessaires pour s'authentifier sur un service Web implémentant le standard OAuth 2.0. Ces caractéristiques peuvent être définies et modifiées à l'aide de différentes propriétés WLangage.
Ce type de variable doit être passé en paramètre à la fonction AuthIdentifie. Si l'authentification est réalisée, cette fonction renvoie une variable de type AuthToken qui pourra être utilisée pour effectuer des requêtes authentifiées sur le service Web.
Remarque : Pour plus de détails sur la déclaration de ce type de variable et l'utilisation des propriétés WLangage, consultez Déclaration d'une variable.
Exemple
// Exemple permettant de récupérer un token pour effectuer une requête sur Dropbox
OAuth2Params est un OAuth2Paramètres
OAuth2Params.ClientID = "01234567890123456789" 
OAuth2Params.ClientSecret = "98765432109876543210"
OAuth2Params.URLAuth = "https://www.dropbox.com/oauth2/authorize"
OAuth2Params.URLToken = "https://api.dropboxapi.com/oauth2/token"
OAuth2Params.ParamètresSupplémentaires = "force_reapprove=false"
<COMPILE SI TypeConfiguration <> Site>
	// Si ce n'est pas dans un site WEB il faut une URL de redirection en localhost
	OAuth2Params.URLRedirection = "http://localhost:9874/"
<FIN>

// Demande d'authentification : ouvre la fenêtre de login
MonToken est un AuthToken = AuthIdentifie(OAuth2Params)

// Requête authentifiée sur une API de Dropbox
req est un httpRequête
req.Méthode = httpPost
req.URL = "https://api.dropboxapi.com/2/files/list_folder"
req.AuthToken = MonToken // Token d'authentification
req.ContentType = "application/json"
vParamAPI est un Variant
vParamAPI.path = "/Homework/math"
vParamAPI.recursive = Faux
vParamAPI.include_media_info = Faux
vParamAPI.include_deleted = Faux
vParamAPI.include_has_explicit_shared_members = Faux
req.Contenu = VariantVersJSON(vParamAPI)

réponseHTTP est un httpRéponse = HTTPEnvoie(req)
soit Données = JSONVersVariant(réponseHTTP.Contenu)
// Utilisation des données reçues ...
Nouveauté SaaS
param est un OAuth2Paramètres
param.ClientID = "1060349503186-pc7ahmeb6h6mc3jd19nlva26kt7gk59q.apps.googleusercontent.com"
param.ClientSecret = "oBTQL52JiT82Wmuy9-76MpiM"
param.URLRedirection = "http://localhost:3400/"
param.URLAuth = "https://accounts.google.com/o/oauth2/v2/auth"
param.URLToken = "https://oauth2.googleapis.com/token"
param.Scope = "openid email"
param.CertificatClient = fRepExe() + fSep() + "twr34o-7.pcsoft.com.pfx"
param.MotDePasseCertificatClient = ""
param.Option = authClientSecretBasic

token est un AuthToken = AuthIdentifie(param)
SI token..Valide ALORS
	Info(token.RéponseServeur)
SINON
	Erreur(ErreurInfo(errComplet))
FIN
Propriétés

Propriétés spécifiques à la description des variables de type OAuth2Paramètres

Les propriétés suivantes peuvent être utilisées pour manipuler les informations nécessaires à la demande d'authentification :
Nom de la propriétéType manipuléEffet
Nouveauté SaaS
CertificatClient
Chaîne de caractères ou BufferCorrespond :
  • à une chaîne de caractères contenant un chemin d'accès au fichier ".p12" contenant le certificat à joindre à la requête. Le chargement du certificat se fera automatiquement en prenant :
    • le certificat présent dans la bibliothèque de l'exécutable (s'il a été intégré à l'application),
    • le certificat présent à l'emplacement spécifié sur disque (si le certificat n'a pas été intégré dans la bibliothèque de l'exécutable).
  • à un buffer contenant le certificat (utilisation de la fonction fChargeBuffer).
Si cette propriété correspond à une chaîne vide (""), le certificat par défaut est réinitialisée à "<Aucun>".
Attention : Cette propriété est disponible uniquement à partir de WINDEV Suite SaaS 2025 Update 1. Pour plus de détails, consultez Utiliser les nouveautés de WINDEV Suite SaaS 2025.
Android Pour Android, cette propriété est disponible uniquement à partir de WINDEV Suite SaaS 2025 Update 2. Pour plus de détails, consultez Utiliser les nouveautés de WINDEV Suite SaaS 2025.
ClientIDChaîne de caractèresIdentifiant du client fourni par le service lors de l'enregistrement de l'application.
ClientSecretChaîne de caractères ou Chaîne secrèteCode d'accès secret de l'application. Ce code est donné par le service lors de l'enregistrement de l'application.
Nouveauté 2025
Utilisation de chaînes secrètes : Si vous utilisez le coffre-fort de chaînes secrètes, le type de la chaîne secrète utilisable pour ce paramètre doit être "Chaîne Ansi ou Unicode".
Pour plus de détails sur les chaînes secrètes et l'utilisation du coffre-fort, consultez Coffre-fort de chaînes secrètes.

Android Les chaînes secrètes ne sont pas disponibles pour ce paramètre en Android/Android Widget.
Nouveauté 2025
MotDePasse
Chaîne de caractères ou Chaîne secrèteMot de passe associé à l'utilisateur.
Cette propriété est utilisée uniquement si la propriété TypeAutorisation correspond à la constante taMotDePasse.
Nouveauté 2025
Utilisation de chaînes secrètes : Si vous utilisez le coffre-fort de chaînes secrètes, le type de la chaîne secrète utilisable pour ce paramètre doit être "Chaîne Ansi ou Unicode".
Pour plus de détails sur les chaînes secrètes et l'utilisation du coffre-fort, consultez Coffre-fort de chaînes secrètes.
Nouveauté SaaS
MotDePasseCertificatClient
Chaîne de caractères ou Chaîne secrèteMot de passe associé au certificat client (chaîne vide par défaut).
Nouveauté 2025
Utilisation de chaînes secrètes : Si vous utilisez le coffre-fort de chaînes secrètes, le type de la chaîne secrète utilisable pour ce paramètre doit être "Chaîne Ansi ou Unicode".
Pour plus de détails sur les chaînes secrètes et l'utilisation du coffre-fort, consultez Coffre-fort de chaînes secrètes.
Attention : Cette propriété est disponible uniquement à partir de WINDEV Suite SaaS 2025 Update 1. Pour plus de détails, consultez Utiliser les nouveautés de WINDEV Suite SaaS 2025.
Android Pour Android, cette propriété est disponible uniquement à partir de WINDEV Suite SaaS 2025 Update 2. Pour plus de détails, consultez Utiliser les nouveautés de WINDEV Suite SaaS 2025.
Nouveauté 2025
NomUtilisateur
Chaîne de caractèresNom de l'utilisateur.
Cette propriété est utilisée uniquement si la propriété TypeAutorisation correspond à la constante taMotDePasse.
OptionConstante de type EntierOptions d'authentification :
  • authDéfaut : Authentification OAuth par défaut.
  • authPKCE : Authentification via le protocole PKCE (Proof Key for Code Exchange, clé de preuve pour l'échange de code).
  • Nouveauté SaaS
    authClientSecretBasic : Authentification utilisant le "ClientID" et le "ClientSecret" encodés en Base64 dans l'entête HTTP de la requête. Nécessite une connexion sécurisée.
Remarque : Le protocole PKCE permet d'utiliser une sécurité supplémentaire par rapport à l'authentification OAuth. Dans certains cas, bien que le protocole PKCE soit utilisé, il peut être nécessaire de préciser la clé secrète (propriété ClientSecret). Nous vous conseillons de consulter les spécifications attendues par la plateforme utilisée.
ParamètresSupplémentairesChaîne de caractèresParamètres de la première requête d'authentification. Cette chaîne doit être formatée comme des paramètres d'URL.
Nouveauté SaaS
Remarque : Ce paramètre permet par exemple d'utiliser une assertion JWT, créée avec la fonction JWTCréeAssertion. Pour utiliser cette assertion, la propriété TypeAutorisation doit correspondre à la constante taGrantTypePersonnalisé.
Attention : Cette fonctionnalité est disponible uniquement à partir de WINDEV Suite SaaS 2025 Update 1. Pour plus de détails, consultez Utiliser les nouveautés de WINDEV Suite SaaS 2025.
ScopeChaîne de caractèresPermissions demandées. Les valeurs possibles sont spécifiques au service Web utilisé.
Les différentes valeurs possibles doivent être séparées par un espace.
TypeAutorisationConstanteType d'autorisation disponible. Les valeurs possibles sont :
  • taApplicationCliente : Authentification sans fenêtre de login.
    L'autorisation de connexion est donnée à l'application (et non à l'utilisateur). Le token fourni est un token lié à l'application, permettant d'accéder aux ressources de l'application.
  • taCodeAutorisation (Valeur par défaut) : L'autorisation de connexion est donnée à l'utilisateur. Une fenêtre de login est affichée, permettant à l'utilisateur de saisir son login et mot de passe. Le token fourni est un token lié à l'utilisateur.
  • Nouveauté SaaS
    taGrantTypePersonnalisé : Authentification utilisant les informations spécifiées dans la propriété ParamètresSupplémentaires. Il est notamment possible d'utiliser une assertion JWT, créée avec la fonction JWTCréeAssertion.
    Attention : Cette constante est disponible uniquement à partir de WINDEV Suite SaaS 2025 Update 1. Pour plus de détails, consultez Utiliser les nouveautés de WINDEV Suite SaaS 2025.
  • Nouveauté 2025
    taMotDePasse : Authentification silencieuse de l'utilisateur.
    L'autorisation de connexion est donnée à l'utilisateur spécifié dans la propriété NomUtilisateur (le mot de passe associé étant spécifié via la propriété MotDePasse). Le token obtenu est lié à l'utilisateur.
TypeRéponseChaîne de caractères ou constanteType de réponse attendu. Les valeurs possibles sont :
  • oauth2TypeRéponseCode (ou "Code") : La réponse est de type "Code".
  • oauth2TypeRéponseToken (ou "Token") : La réponse est de type "Token".
La valeur par défaut est oauth2TypeRéponseCode.
Remarques :
  • Dans le cas d'une authentification de "personne", le type de réponse utilisé doit être "Token".
  • Dans le cas d'une authentification pour une API ou un service (par exemple, serveur de mails Google), le type de réponse utilisé doit être "Code".
URLAuthChaîne de caractèresURL d'autorisation à utiliser (première URL du standard OAuth 2.0).
Nouveauté 2025
URLDéconnexion
Chaîne de caractèresURL de déconnexion du service Web (si le service Web gère la déconnexion).
Remarque : Le service Web peut gérer uniquement la révocation. Dans ce cas, il est nécessaire de spécifier l'URL correspondante dans la propriété URLRévocation.
URLRedirectionChaîne de caractèresURL de redirection à utiliser pendant le mécanisme d'authentification.
WINDEVAndroid Pour une application Windows ou Android, cette URL doit être de la forme "http://localhost:NumeroPort". Cette valeur doit être strictement identique à celle renseignée lors de la déclaration de l'application dans le service Web concerné.
iPhone/iPad Cette propriété doit obligatoirement être renseignée. Elle correspond au schéma d'URL de redirection spécifié par le fournisseur du service Web pour iOS.
Exemples :
  • pour Facebook, l'URL doit être de la forme "fb<ClientId>://authorize/".
  • pour Google, l'URL doit être de la forme "<Schéma d'URL iOS>:/oauth2redirect" où :
    • <Schéma d'URL iOS> correspond à la valeur fournie par Google lors de la création d'un identifiant client OAuth pour iOS.
    • "/oauth2redirect" est un exemple de valeur. Ce paramètre peut correspondre à n'importe quelle valeur commençant par un "/" unique (par exemple, "//oauth2redirect" n'est pas accepté).
WEBDEV - Code Serveur Pour un site WEBDEV cette URL est calculée automatiquement. Il n'est donc pas nécessaire d'affecter la propriété.
Cette URL doit être indiquée à l'identique dans la configuration de l'application du fournisseur du service d'authentification. Elle est de la forme :
"http(s)://localhost/WD300AWP/WD300Awp.exe/
OAUTH2_RETOUR".
Le protocole HTTPS sera automatiquement utilisé si besoin dans l'URL de redirection.
Si un proxy HTTP fait intermédiaire entre le serveur d'application de WEBDEV qui héberge le site et le serveur d'authentification, le proxy doit être configuré pour indiquer le bon protocole dans la variable d'environnement HTTP "Forwarded".
Nouveauté 2025
URLRévocation
Chaîne de caractèresURL de révocation du service Web (si le service Web gère la révocation).
Remarque : Le service Web peut gérer uniquement la déconnexion. Dans ce cas, il est nécessaire de spécifier l'URL correspondante dans la propriété URLDéconnexion.
URLTokenChaîne de caractèresURL de récupération du token d'accès à utiliser (seconde URL du standard OAuth 2.0).
Remarques

Fonctionnement de l'authentification OAuth 2.0

Les étapes de l'authentification OAuth 2.0 réalisées par la fonction AuthIdentifie sont les suivantes :
  • Exécution d'une première requête HTTP pour demander une autorisation (URL d'autorisation spécifiée dans la variable de type OAuth2Paramètres).
  • Ouverture d'une fenêtre d'identification de l'utilisateur conformément au protocole OAuth 2.0. L'interface d'identification est donnée par le service accédé.
  • Après identification, le serveur retourne un premier code d'autorisation permettant de demander un token d'accès aux ressources. Ce code est ajouté en paramètre de la deuxième URL (URL de token d'accès spécifiée dans la variable de type OAuth2Paramètres).
  • Exécution de la seconde requête HTTP pour demander le token d'accès. Le résultat est un buffer JSON qui contient, entre autres, le token d'accès ("access_token") à utiliser pour les requêtes authentifiées. La variable de type AuthToken contient les informations contenues dans ce buffer JSON. Ce token d'accès sera utilisé par les appels aux APIs du service Web.
Pour utiliser des API du service Web, il suffit d'utiliser la fonction HTTPEnvoie avec une variable de type httpRequête définissant la requête à exécuter.
La variable AuthToken devra être affectée à la propriété AuthToken de la variable httpRequête (voir exemple).
Dans ce cas, le serveur recevra alors l'entête HTTP "Authorization" avec une valeur de la forme : "Authorization : Bearer xxx_access_token_xxx".
Attention :
  • Si le serveur ne renvoie pas le token d'accès sous forme de code JSON conformément à la norme OAuth2.0, une erreur sera générée et le token ne sera pas récupéré. Il est possible de récupérer la réponse du serveur via la propriété RéponseServeur de la variable de type AuthToken.
  • Si le serveur ne gère pas l'entête HTTP "Authorization" pour la transmission du token d'accès, cette transmission doit être faite par le développeur selon le format attendu par le service demandé.
    L'exemple suivant permet d'utiliser le service Web de Facebook. Dans ce cas, le token d'accès doit être précisé sur l'URL de la requête.
    • WINDEVAndroid Exemple de code pour Facebook
      // Exemple permettant de récupérer le nom du compte Facebook
      MonToken est un AuthToken
      MonTokenParam est un OAuth2Paramètres
      
      MonTokenParam.ClientID = "123456789012345"
      MonTokenParam.ClientSecret = "45g8jh5kll45579021qsg5444j"
      MonTokenParam.URLAuth = "https://www.facebook.com/dialog/oauth"
      MonTokenParam.URLToken = "https://graph.facebook.com/v2.3/oauth/access_token"
      MonTokenParam.URLRedirection = "http://localhost:9874/"
      MonTokenParam.Scope = "email"
      
      MonToken = AuthIdentifie(MonTokenParam)
      SI MonToken <> Null ALORS
      	SI ErreurDétectée ALORS
      		Erreur(ErreurInfo())
      	SINON
      		// Token précisé sur l'URL de la requête
      		HTTPRequête("https://graph.facebook.com/me?access_token=" + MonToken.Valeur)
      		vMonRes est un Variant = JSONVersVariant(HTTPDonneRésultat(httpRésultat))
      		// Récupération du nom du compte
      		Trace(vMonRes.name)
      	FIN
      FIN
    • iPhone/iPad Exemple de code pour Facebook :
      MonToken est un AuthToken
      MonTokenParam est un OAuth2Paramètres
      MonTokenParam.ClientID = "1705548803004741"
      MonTokenParam.ClientSecret = "7b3305a5aa1687ef04af001ec3388ecc"
      MonTokenParam.URLAuth = "https://www.facebook.com/dialog/oauth"
      MonTokenParam.URLToken = "https://graph.facebook.com/oauth/access_token"
      MonTokenParam.URLRedirection = "fb1705548803004741://authorize/"
      MonTokenParam.Scope = "email"
      
      MonToken = AuthIdentifie(MonTokenParam)
      SI MonToken <> Null ALORS
      	SI ErreurDétectée ALORS
      		Erreur(ErreurInfo())
      	SINON
      		// Token précisé sur l'URL de la requête
      		HTTPRequête("https://graph.facebook.com/me?access_token=" + MonToken.Valeur)
      		vMonRes est un Variant = JSONVersVariant(HTTPDonneRésultat(httpRésultat))
      		// Récupération du nom du compte
      		Trace(vMonRes.name)
      	FIN
      FIN

Authentification PKCE

Exemple d'authentification PKCE :
OAuth2Params est un OAuth2Paramètres
OAuth2Params.ClientID = "D90iXZWlteM3ESORkGkoWyGkJuxifE1z"
OAuth2Params.Option = authPKCE
OAuth2Params.URLAuth = "https://dev-rw5r4o2eowb8s70k.us.auth0.com/authorize"
OAuth2Params.URLToken = "https://dev-rw5r4o2eowb8s70k.us.auth0.com/oauth/token"
OAuth2Params.URLRedirection = "http://localhost:9874"
OAuth2Params.Scope = "openid email"

MonToken est un AuthToken = AuthIdentifie(OAuth2Params)
SI MonToken <> Null _ET_ PAS ErreurDétectée ALORS
MonIdentité est une OpenIDIdentité = OpenIDLitIdentité(MonToken)
	SI MonIdentité.Valide ALORS
		Trace(MonIdentité.Email)
		Trace(MonIdentité.Nom)
		Trace(MonIdentité.Prénom)
	FIN
SINON
	Info("Echec" + ErreurInfo(errComplet))
FIN
Nouveauté SaaS

Authentification via "Client Secret Basic"

Exemple d'authentification par "Client Secret Basic" :
OAuth2Params est un OAuth2Paramètres
OAuth2Params.ClientID = "1060349503186-pc7ahmeb6h6mc3jd19nlva26kt7gk59q.apps.googleusercontent.com"
OAuth2Params.ClientSecret = "oBTQL52JiT82Wmuy9-76MpiM"
OAuth2Params.URLRedirection = "http://localhost:3400/"
OAuth2Params.URLAuth = "https://accounts.google.com/o/oauth2/v2/auth"
OAuth2Params.URLToken = "https://oauth2.googleapis.com/token"
OAuth2Params.Scope = "openid email"
OAuth2Params.Option = authClientSecretBasic


token est un AuthToken = AuthIdentifie(OAuth2Params)
SI token..Valide ALORS
	Info(token.RéponseServeur)
FIN
Liste des exemples associés :
WD OAuth Exemples didactiques (WINDEV) : WD OAuth
[ + ] OAuth permet d'agir en tant qu'utilisateur d'une plateforme tierce sans connaître les identifiants (nom d'utilisateur et mot de passe) de cet utilisateur.
Beaucoup de plateformes tierces (Google, Twitter, Facebook pour ne citer qu'eux) proposent des API pour lesquelles il est possible de se connecter avec les informations d'un de leurs utilisateurs. Cette identification est faite au travers de OAuth. Ainsi, toutes les requêtes effectuées sur leurs services (API, ...) devront être effectuées avec un "jeton d'accès" (appelé Access Token) identifiant à la fois l'application (le "client") et l'utilisateur.
L'exemple propose didactiquement de se connecter à Google et Microsoft grâce à la fonction AuthIdentifie et au type OAuth2Paramètre.
Version minimum requise
  • Version 22
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 07/03/2025

Signaler une erreur ou faire une suggestion | Aide en ligne locale