Create and Sign a JSON Web Token (JWT) with Node.JS


var jose = require('node-jose');
var forge = require('node-forge');
var uuid = require('uuid/v1');
(...)
// the audience is the URL of the token endpoint 
var audience = "https://AAAS_PLATFORM/idp/YOUR_TENANT/authn/token";
// the JWT token to be signed and sent to the Authentication Service
var bodyCnt = {
	sub: "YOUR_CLIENTID",
	aud: audience,
	nbf: Math.floor(Date.now() / 1000) - 30,
	iss: "YOUR_CLIENTID",
	exp: Math.floor(Date.now() / 1000) + (60 * 60),
	jti: uuid(),
	iat: Math.floor(Date.now() / 1000) - 30
};
// transform your certificate to PEM format if you have it in binary DER (CRT, CER ...)
var privateKeyDER = (...);
var privateKeyPEM = forge.pki.certificateToPem(forge.pki.certificateFromAsn1(forge.asn1.fromDer(privateKeyDER .toString('binary'))))
// parsing the PEM formatted private Key 
jose.JWK.asKey(privateKeyPEM, "pem").then(function(jwk) {
	
	// jwk contains the parsed key 
	// creating the signature, using RS256 algorithm 
	var signature = 
		jose.JWS.createSign({
				alg: "RS256",
				format: 'compact'
			}, jwk).
				update(JSON.stringify(bodyCnt), "utf8").
					final();
	
	// signing 
	signature.then(function(result) {
		// result contains a signed ID Token, ready to send to the Authentication Service !
	   
	}, function(error) {
		console.log(error);
	});
});