Skip to content

Instantly share code, notes, and snippets.

@ysbaddaden
Created June 19, 2019 14:42
Show Gist options
  • Save ysbaddaden/1063d0aa671cb3aab2f7e842cd9dcfb4 to your computer and use it in GitHub Desktop.
Save ysbaddaden/1063d0aa671cb3aab2f7e842cd9dcfb4 to your computer and use it in GitHub Desktop.
WINDEV: create JWT with HS256 signature
// Crée un JSON Web Token pour l'extranet, signé via HMAC SHA 256, permettant
// d'identifier le CaC sur l'extranet comme utilisateur ayant accès à toutes les
// données.
PROCÉDURE CréerTokenExtranet()
// header du token (algorithm, type) :
taHeader est un tableau associatif de chaînes
taHeader["alg"] = "HS256"
taHeader["typ"] = "JWT"
bHeader est un Buffer
sHeader est une chaîne
bHeader = Sérialise(taHeader, bHeader, psdJSON)
sHeader = Encode(bHeader, encodeBASE64URL)
// payload du token (date création, date expiration, ...) :
taPayload est un tableau associatif d'entiers
taPayload["iat"] = DateHeureVersEpoch(DateHeureSys()) // date/heure de création du token
taPayload["exp"] = DateHeureVersEpoch(DateHeureSys() + 2 * 60 * 60) // date/heure d'expiration du token (valide 2 heures)
taPayload["member_id"] = 0 // utilisateur 0 => accès complet
bPayload est un Buffer
sPayload est une chaîne
Sérialise(taPayload, bPayload, psdJSON)
sPayload = Encode(bPayload, encodeBASE64URL)
// signature du token (via clé secrète) :
sSecret est une chaîne = "somesecret" // clé à définir avec l'extranet
sToken est une chaîne = sHeader + "." + sPayload
bSignature est un buffer = HashChaîne(HA_HMAC_SHA_256, sToken, sSecret)
sSignature est une chaîne = Encode(bSignature, encodeBASE64URL)
sJWT est une chaîne = sToken + "." + sSignature
RENVOYER sJWT
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment