Tags :oAuth2, token
19 janvier 2022
publié par 

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
    //rien (le token sera invalide)
    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 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
    //sérialise le token
    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.

 

< Retour

Publier un commentaire : 
Votre adresse email ne sera pas publiée