DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Fonctions WLangage / Communication / Gestion du protocole OAuth 2.0
  • Fonctionnement de l'authentification OAuth 2.0
  • Fonctionnement de l'authentification OpenID
  • Application en arrière-plan : Spécificité à partir de Android 10
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Effectue une authentification utilisant :
  • soit le protocole OAuth 2.0 sur un service Web quelconque.
  • WindowsLinuxiPhone/iPadWidget IOSMac Catalyst soit le protocole OpenID sur un service Web quelconque.
  • WindowsLinuxiPhone/iPadWidget IOSMac Catalyst soit un token JWT.
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 ...
Syntaxe
Widget IOSMac Catalyst Cette syntaxe n'est pas disponible pour les applications en mode Widget iOS ou en mode Catalyst

Réaliser une authentification via le protocole OAuth 2.0 Masquer les détails

<Résultat> = AuthIdentifie(<Paramètres d'authentification>)
<Résultat> : Variable de type AuthToken
Variable de type AuthToken correspondant au token (ou jeton) contenant les informations d'accès pour les prochaines requêtes authentifiées.
<Paramètres d'authentification> : Variable de type OAuth2Paramètres
Nom de la variable de type OAuth2Paramètres contenant tous les paramètres décrivant les éléments nécessaires à la récupération du token d'accès.

Réaliser une authentification via le protocole OAuth 2.0 (syntaxe asynchrone) Masquer les détails

AuthIdentifie(<Paramètres d'authentification> , <Procédure WLangage>)
<Paramètres d'authentification> : Variable de type OAuth2Paramètres
Nom de la variable de type OAuth2Paramètres contenant tous les paramètres décrivant les éléments nécessaires à la récupération du token d'accès.
<Procédure WLangage> : Nom de procédure
Nom de la procédure WLangage (également nommée "callback") appelée lors de l'authentification. Pour plus de détails sur cette procédure, consultez Paramètres de la procédure utilisée par la fonction AuthIdentifie.
WindowsLinuxiPhone/iPad

Réaliser une authentification via le protocole OpenID Masquer les détails

<Résultat> = AuthIdentifie(<Paramètres d'authentification>)
<Résultat> : Variable de type AuthToken
Variable de type AuthToken correspondant au token (ou jeton) contenant les informations d'accès pour les prochaines requêtes authentifiées.
<Paramètres d'authentification> : Variable de type OpenIDParamètres
Nom de la variable de type OpenIDParamètres contenant tous les paramètres décrivant les éléments nécessaires à la récupération du token d'accès.
WindowsLinuxiPhone/iPadWidget IOSMac Catalyst

Réaliser une authentification via le protocole OpenID (syntaxe asynchrone) Masquer les détails

AuthIdentifie(<Paramètres d'authentification> , <Procédure WLangage>)
<Paramètres d'authentification> : Variable de type OpenIDParamètres
Nom de la variable de type OpenIDParamètres contenant tous les paramètres décrivant les éléments nécessaires à la récupération du token d'accès.
<Procédure WLangage> : Nom de procédure
Nom de la procédure WLangage (également nommée "callback") appelée lors de l'authentification. Pour plus de détails sur cette procédure, consultez Paramètres de la procédure utilisée par la fonction AuthIdentifie.
WindowsLinuxiPhone/iPadWidget IOSMac Catalyst

Réaliser une authentification via JWT Masquer les détails

<Résultat> = AuthIdentifie(<Paramètres d'authentification>)
<Résultat> : Variable de type AuthToken
Variable de type AuthToken correspondant au token (ou jeton) contenant les informations d'accès pour les prochaines requêtes authentifiées.
<Paramètres d'authentification> : Variable de type JWTParamètres
Nom de la variable de type JWTParamètres contenant tous les paramètres décrivant les éléments nécessaires à la récupération du token d'accès.
WindowsLinuxiPhone/iPadWidget IOSMac Catalyst

Réaliser une authentification via JWT (syntaxe asynchrone) Masquer les détails

AuthIdentifie(<Paramètres d'authentification> , <Procédure WLangage>)
<Paramètres d'authentification> : Variable de type JWTParamètres
Nom de la variable de type JWTParamètres contenant tous les paramètres décrivant les éléments nécessaires à la récupération du token d'accès.
<Procédure WLangage> : Nom de procédure
Nom de la procédure WLangage (également nommée "callback") appelée lors de l'authentification. Pour plus de détails sur cette procédure, consultez Paramètres de la procédure utilisée par la fonction AuthIdentifie.
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

Fonctionnement de l'authentification OpenID

Les étapes de l'authentification OpenID 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 OpenIDParamètres).
  • Ouverture d'une fenêtre d'identification de l'utilisateur conformément au protocole OpenID. L'interface d'identification est donnée par le service accédé.
  • Après identification, exécution d'un 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 identifier l'utilisateur, il suffit d'utiliser la fonction OpenIDLitIdentité en lui spécifiant la variable de type AuthToken.
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.
Android

Application en arrière-plan : Spécificité à partir de Android 10

A partir de Android 10, il n'est plus possible d'ouvrir une fenêtre lorsque l'application est en arrière-plan.
La fonction AuthIdentifie peut provoquer l'ouverture d'une fenêtre. Si cette fonction est utilisée alors que l'application est en arrière-plan, une erreur fatale sera générée.
Conseils :
  • Il est possible de savoir si l'application est en arrière-plan grâce à la fonction EnModeArrièrePlan.
  • Si une application a besoin d'interagir avec l'utilisateur alors qu'elle se trouve en arrière-plan, la solution consiste à afficher une notification (via le type Notification). Lors du clic sur la notification, l'application sera remise au premier plan si la propriété ActiveApplication est à Vrai. Il est également possible d'ouvrir une fenêtre depuis la procédure passée à la propriété ActionClic.
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.
Classification Métier / UI : Code métier
Composante : wd300ggl.dll
Version minimum requise
  • Version 22
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 24/06/2024

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