De nombreuses API REST sont accessibles après une authentification OAuth 2.0. Lorsqu'une application doit réutiliser une connexion sans renouveler systématiquement l'authentification, il est possible de mémoriser le token de connexion obtenu par la fonction AuthIdentifie.
Voici un exemple :
- créer dans le traitement de connexion une première procédure interne qui sauvegardera le token dans un buffer :
PROCEDURE INTERNE SauvegardeToken() sNomFichierToken est une chaîne = fRepDonnées()+fSep+"token.bin" bufToken est un Buffer Sérialise(Token,bufToken,psdBinaire) fSauveBuffer(sNomFichierToken,bufToken) FIN
- créer dans le traitement de connexion une seconde procédure interne qui restaurera le token sauvegardé dans un buffer :
PROCEDURE INTERNE RestaureToken() sNomFichierToken est une chaîne=fRepDonnées()+fSep+"token.bin" SI fFichierExiste(sNomFichierToken) ALORS QUAND EXCEPTION DANS Désérialise(Token,fChargeBuffer(sNomFichierToken),psdBinaire) FAIRE
FIN FIN FIN
- remplacer l'appel unique de AuthIdentifie par un chargement préalable du token obtenu lors de la précédente authentification, afin de l'utiliser :
RestaureToken() SI PAS Token..Valide ALORS Token = AuthIdentifie(OAuth2Params) SI Token..Valide ALORS SauvegardeToken() FIN SINON SI Token.DateExpiration < Maintenant() ALORS Token = AuthRenouvelleToken(Token) SI Token..Valide ALORS SauvegardeToken() FIN FIN FIN SI PAS Token..Valide ALORS Erreur("Echec de l'authentification ...") RETOUR FIN
En fonction des besoins le buffer contenant le token peut être chiffré, conservé dans un mémo binaire d'une base HFSQL ...
Liens utiles :
== Mise à jour 17/5/2022 ==
Cas particulier pour une application exécutée sous Android : la sérialisation d'une variable OAuthToken n'est pas encore acceptée. Dans ce cas si on doit mémoriser un token on peut utiliser une variable intermédiraire :
- créer une classe donc les membres sont strictement identiques aux propriétés du type OAuthToken
cToken est une Classe Actualisation est une chaîne DateExpiration est une DateHeure RéponseServeur est une Buffer Valeur est une chaîne Valide est un booléen FIN
- affecter une instance de cette classe avec la variable OAuthToken obtenue après OAuthIdentifie : la copie homonymique fait le transfert de toutes les données,
- sérialiser cette instance de classe à la place de la variable OAuthToken.
SI Token.Valide ALORS
oCToken est un cToken = Token Sérialise(oCToken, bufToken, psdXML) FIN
La relecture du token mémorisé sur l'appareil se fera avec l'opération inverse : désérialisation vers une instance de la classe, instance ensuite affectée dans la variable OAuthToken.
|