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. Cela peut permettre :
- à une même application de réutiliser un token qu'elle a obtenu précédemment,
- d'obtenir un token à partir de l'UI d'une application, et de le réutiliser dans :
- une autre application dans laquelle on souhaite éviter la phase d'authentification via un navigateur,
- un service sans interface,
- un code serveur d'un site web ou d'un webservice...
Voici un exemple :
- créer dans le traitement de connexion une première procédure interne qui sauvegardera le token dans un buffer grâce à une sérialisation :
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, un fichier sur disque (cf. fSauveBuffer) ...
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 chaine 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, membres de l'instance ensuite affectés dans la variable OAuthToken :
oToken est un cToken Désérialise(oToken, bufToken, psdXML) Token.Actualisation = oToken.Actualisation Token.DateExpiration = oToken.DateExpiration Token.Valeur = oToken.Valeur
|