green-jwt
Version:
Node implementation of JSON Web Token (JWT) with support for signatures (JWS), encryption (JWE) and web keys (JWK).
83 lines (70 loc) • 2.25 kB
JavaScript
// Generated by CoffeeScript 1.6.3
(function() {
var JwtRequest, crypto, ju, jwa, qstring;
crypto = require("crypto");
qstring = require("querystring");
jwa = require("./jwa");
ju = require("./utils");
module.exports.spec_version = "draft-jones-json-web-token-10";
module.exports.decode = function(token) {
var claim, header, headerSeg, payloadSeg, segments, signatureSeg;
segments = token.split('.');
if (segments.length !== 3) {
throw new Error('Not enough or too many segments');
}
headerSeg = segments[0];
payloadSeg = segments[1];
signatureSeg = segments[2];
header = JSON.parse(ju.base64urlDecode(headerSeg));
claim = JSON.parse(ju.base64urlDecode(payloadSeg));
return new JwtRequest(header, claim, segments);
};
module.exports.encode = function(claim, key, algorithm, header_ext) {
var header, jwa_provider, jwa_signer, segments, val;
if (algorithm == null) {
algorithm = "HS256";
}
if (header_ext == null) {
header_ext = {};
}
jwa_provider = jwa.provider(algorithm);
if (!jwa_provider) {
throw new Error("Algorithm " + algorithm + " is not yet supported.");
}
jwa_signer = jwa_provider(key);
header = {
typ: 'JWT',
alg: algorithm
};
for (key in header_ext) {
val = header_ext[key];
header[key] = val;
}
segments = [];
segments.push(ju.base64urlEncode(JSON.stringify(header)));
segments.push(ju.base64urlEncode(JSON.stringify(claim)));
jwa_signer.update(segments.join("."));
segments.push(jwa_signer.sign());
return segments.join('.');
};
JwtRequest = (function() {
function JwtRequest(header, claim, segments) {
this.header = header;
this.claim = claim;
this.segments = segments;
}
JwtRequest.prototype.verify = function(key) {
var _alg, _ref, _verifier;
_alg = (_ref = this.header) != null ? _ref.alg : void 0;
if (!_alg) {
_alg = "none";
}
_verifier = jwa.verifier(_alg);
if (!_verifier) {
throw new Error("Unable to find a verifier for algorithm " + _alg);
}
return _verifier.verify(this, key);
};
return JwtRequest;
})();
}).call(this);