app/JwtHelpers.jsx (45 lines of code) (raw):

import jwt from "jsonwebtoken"; /** * perform the validation of the token via jsonwebtoken library. * if validation fails then the returned promise is rejected * if validation succeeds, then the promise only completes once the decoded content has been set into the state. * @returns {Promise<object>} Decoded JWT content or rejects with an error */ function validateAndDecode(token, signingKey, refreshToken) { return new Promise((resolve, reject)=>{ jwt.verify(token, signingKey, (err,decoded)=>{ if(err){ console.log("token: ", token); console.log("signingKey: ", signingKey); console.error("could not verify JWT: ", err); reject(err); } // console.log("decoded JWT"); localStorage.setItem("adfs-test:token", token); //it validates so save the token if(refreshToken) localStorage.setItem("adfs-test:refresh", refreshToken); resolve(decoded); }); }); } /** * gets the signing key from the server * @returns {Promise<string>} Raw content of the signing key in PEM format */ async function loadInSigningKey() { const result = await fetch("/meta/oauth/publickey.pem"); switch(result.status){ case 200: return result.text(); default: console.error("could not retrieve signing key, server gave us ", result.status); throw "Could not retrieve signing key"; } } /** * returns the raw JWT for passing to backend services * @returns {string} the JWT, or null if it is not set. */ function getRawToken() { return localStorage.getItem("adfs-test:token"); } export {validateAndDecode, loadInSigningKey, getRawToken};