Created
September 5, 2022 15:11
-
-
Save gigincg/ba160f954df72ec081d15a8f3746170d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fs = require("fs"); | |
const jose = require("node-jose"); | |
const jwktopem = require("jwk-to-pem"); | |
const jwt = require("jsonwebtoken"); | |
// Generate a new JWKS | |
// const keyStore = jose.JWK.createKeyStore(); | |
// keyStore.generate("RSA", 2048, { alg: "RS256", use: "sig" }).then((result) => { | |
// fs.writeFileSync( | |
// "keys.json", | |
// JSON.stringify(keyStore.toJSON(true), null, " ") | |
// ); | |
// }); | |
async function getPublicKey(jwks) { | |
const ks = fs.readFileSync("keys.json"); | |
const keyStore = await jose.JWK.asKeyStore(ks.toString()); | |
const publicKey = keyStore.toJSON(); | |
console.log("publicKey: ", publicKey); | |
return publicKey; | |
} | |
// getPublicKey(); | |
async function createToken() { | |
const ks = fs.readFileSync("keys.json"); | |
const keyStore = await jose.JWK.asKeyStore(ks.toString()); | |
const [key] = keyStore.all({ use: "sig" }); | |
const opt = { compact: true, jwk: key, fields: { typ: "jwt" } }; | |
const payload = JSON.stringify({ | |
exp: Math.floor((Date.now() + 3600 * 1000) / 1000), | |
iat: Math.floor(Date.now() / 1000), | |
data: "Hello World", | |
}); | |
const token = await jose.JWS.createSign(opt, key).update(payload).final(); | |
console.log("token: ", token); | |
return token; | |
} | |
// createToken(); | |
// Async Function `main` | |
async function main() { | |
const token = await createToken(); | |
// const { data } = await axios.get('http://localhost:4040/jwks') | |
const data = await getPublicKey(); | |
const [firstKey] = data.keys; | |
const publicKey = jwktopem(firstKey); | |
try { | |
const decoded = jwt.verify(token, publicKey); | |
console.log("Decoded:", decoded); | |
} catch (e) { | |
console.log("Error:", e); | |
} | |
} | |
main(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
NodeJS JWKS Implementation