Skip to content

Instantly share code, notes, and snippets.

@gigincg
Created September 5, 2022 15:11
Show Gist options
  • Save gigincg/ba160f954df72ec081d15a8f3746170d to your computer and use it in GitHub Desktop.
Save gigincg/ba160f954df72ec081d15a8f3746170d to your computer and use it in GitHub Desktop.
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();
@gigincg
Copy link
Author

gigincg commented Sep 5, 2022

NodeJS JWKS Implementation

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment