@astronautlabs/jwt 0.0.9 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +3 -0
- package/dist/browser/index.js +1 -1
- package/dist/browser/webcrypto-jwt.js +23 -17
- package/dist/browser/webcrypto-jwt.js.map +1 -1
- package/dist/browser/webcrypto-jwt.test.js +1 -1
- package/dist/browser/webcrypto-jwt.test.js.map +1 -1
- package/dist/common/expiry.js +2 -2
- package/dist/common/expiry.js.map +1 -1
- package/dist/common/index.js +1 -1
- package/dist/engine.test.js +19 -19
- package/dist/engine.test.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/node/engine.test.js +1 -1
- package/dist/node/engine.test.js.map +1 -1
- package/dist/node/index.js +7 -6
- package/dist/node/index.js.map +1 -1
- package/dist/test.js +1 -1
- package/dist/test.js.map +1 -1
- package/karma.conf.ts +5 -16
- package/package.json +6 -7
- package/src/browser/webcrypto-jwt.ts +16 -4
- package/src/common/expiry.ts +1 -1
- package/src/engine.test.ts +5 -5
- package/src/node/index.ts +2 -1
package/CHANGELOG.md
ADDED
package/dist/browser/index.js
CHANGED
|
@@ -7,7 +7,7 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
|
7
7
|
o[k2] = m[k];
|
|
8
8
|
}));
|
|
9
9
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
-
for (var p in m) if (p !== "default" && !
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
exports.JWT = exports.createJWTEngine = void 0;
|
|
@@ -127,8 +127,6 @@ var WebCryptoJWT = /** @class */ (function () {
|
|
|
127
127
|
this.subtleCrypto = crypto.subtle || crypto['webkitSubtle'];
|
|
128
128
|
if (!this.subtleCrypto && 'msCrypto' in window)
|
|
129
129
|
this.subtleCrypto = window['msCrypto'].Subtle;
|
|
130
|
-
if (!this.subtleCrypto)
|
|
131
|
-
throw new Error("Not supported: No Subtle Crypto support");
|
|
132
130
|
};
|
|
133
131
|
WebCryptoJWT.prototype.encode = function (payload, options) {
|
|
134
132
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -158,7 +156,7 @@ var WebCryptoJWT = /** @class */ (function () {
|
|
|
158
156
|
claims = decodedToken.payload;
|
|
159
157
|
// Signature must match
|
|
160
158
|
if (decodedToken.header.alg !== algorithm)
|
|
161
|
-
throw new Error("Cannot validate JWT '"
|
|
159
|
+
throw new Error("Cannot validate JWT '".concat(string, "': Token has incorrect algorithm"));
|
|
162
160
|
_b = algorithm !== 'none';
|
|
163
161
|
if (!_b) return [3 /*break*/, 2];
|
|
164
162
|
return [4 /*yield*/, this._verify(decodedToken, secretOrKey, algorithm)];
|
|
@@ -167,14 +165,14 @@ var WebCryptoJWT = /** @class */ (function () {
|
|
|
167
165
|
_c.label = 2;
|
|
168
166
|
case 2:
|
|
169
167
|
if (_b)
|
|
170
|
-
throw new Error("Cannot validate JWT '"
|
|
168
|
+
throw new Error("Cannot validate JWT '".concat(string, "': Invalid signature"));
|
|
171
169
|
// Algorithm must match
|
|
172
170
|
// Expiration
|
|
173
171
|
try {
|
|
174
|
-
common_1.validateExpiry(claims.exp, options.now, (_a = options.validate) === null || _a === void 0 ? void 0 : _a.exp);
|
|
172
|
+
(0, common_1.validateExpiry)(claims.exp, options.now, (_a = options.validate) === null || _a === void 0 ? void 0 : _a.exp);
|
|
175
173
|
}
|
|
176
174
|
catch (e) {
|
|
177
|
-
throw new Error("Cannot validate JWT '"
|
|
175
|
+
throw new Error("Cannot validate JWT '".concat(string, "': ").concat(e.message));
|
|
178
176
|
}
|
|
179
177
|
return [2 /*return*/, {
|
|
180
178
|
string: string,
|
|
@@ -212,7 +210,7 @@ var WebCryptoJWT = /** @class */ (function () {
|
|
|
212
210
|
return [2 /*return*/, true];
|
|
213
211
|
importAlgorithm = ALGORITHMS[alg];
|
|
214
212
|
if (!importAlgorithm)
|
|
215
|
-
throw new Error("Algorithm "
|
|
213
|
+
throw new Error("Algorithm ".concat(alg, " is not supported"));
|
|
216
214
|
encoder = new TextEncoder();
|
|
217
215
|
// TODO Test utf8ToUint8Array function
|
|
218
216
|
if (secret.includes('-----BEGIN PUBLIC KEY-----')) {
|
|
@@ -231,6 +229,8 @@ var WebCryptoJWT = /** @class */ (function () {
|
|
|
231
229
|
secretBuf = encoder.encode(secret);
|
|
232
230
|
keyFormat = 'raw';
|
|
233
231
|
}
|
|
232
|
+
if (!this.subtleCrypto)
|
|
233
|
+
throw new Error("Not supported: No Subtle Crypto support");
|
|
234
234
|
_a.label = 1;
|
|
235
235
|
case 1:
|
|
236
236
|
_a.trys.push([1, 3, , 4]);
|
|
@@ -240,19 +240,21 @@ var WebCryptoJWT = /** @class */ (function () {
|
|
|
240
240
|
return [3 /*break*/, 4];
|
|
241
241
|
case 3:
|
|
242
242
|
e_1 = _a.sent();
|
|
243
|
-
identifier = "jwtUncaughtError"
|
|
244
|
-
console.error("JWT.verify(): Caught error while importing "
|
|
243
|
+
identifier = "jwtUncaughtError".concat(Math.floor(10000 + Math.random() * 10000));
|
|
244
|
+
console.error("JWT.verify(): Caught error while importing ".concat(alg, " key: format=").concat(keyFormat, ", importAlgorithm: ").concat(JSON.stringify(importAlgorithm.importKey), "."));
|
|
245
245
|
console.error(e_1);
|
|
246
246
|
if (typeof window !== 'undefined') {
|
|
247
247
|
window[identifier] = e_1;
|
|
248
|
-
console.error("To aid in debugging, this error was saved to "
|
|
248
|
+
console.error("To aid in debugging, this error was saved to ".concat(identifier));
|
|
249
249
|
}
|
|
250
250
|
throw e_1;
|
|
251
251
|
case 4:
|
|
252
|
-
partialToken = token.encodedHeader
|
|
252
|
+
partialToken = "".concat(token.encodedHeader, ".").concat(token.encodedPayload);
|
|
253
253
|
signaturePart = token.signature;
|
|
254
254
|
messageAsUint8Array = encoder.encode(partialToken);
|
|
255
255
|
signatureAsUint8Array = base64url_1.Base64URL.parse(signaturePart);
|
|
256
|
+
if (!this.subtleCrypto)
|
|
257
|
+
throw new Error("Not supported: No Subtle Crypto support");
|
|
256
258
|
_a.label = 5;
|
|
257
259
|
case 5:
|
|
258
260
|
_a.trys.push([5, 7, , 8]);
|
|
@@ -277,14 +279,14 @@ var WebCryptoJWT = /** @class */ (function () {
|
|
|
277
279
|
case 0:
|
|
278
280
|
importAlgorithm = ALGORITHMS[alg];
|
|
279
281
|
if (!importAlgorithm)
|
|
280
|
-
throw new Error("Algorithm '"
|
|
282
|
+
throw new Error("Algorithm '".concat(alg, "' is not supported"));
|
|
281
283
|
payloadAsJSON = JSON.stringify(payload);
|
|
282
284
|
header = { alg: alg, typ: 'JWT' };
|
|
283
285
|
headerAsJSON = JSON.stringify(header);
|
|
284
286
|
partialToken = base64url_1.Base64URL.stringify(utils_1.Utils.utf8ToUint8Array(headerAsJSON)) + '.' +
|
|
285
287
|
base64url_1.Base64URL.stringify(utils_1.Utils.utf8ToUint8Array(payloadAsJSON));
|
|
286
288
|
if (alg === 'none')
|
|
287
|
-
return [2 /*return*/, partialToken
|
|
289
|
+
return [2 /*return*/, "".concat(partialToken, ".")];
|
|
288
290
|
keyFormat = 'raw';
|
|
289
291
|
encoder = new TextEncoder();
|
|
290
292
|
// TODO Test utf8ToUint8Array function
|
|
@@ -301,6 +303,8 @@ var WebCryptoJWT = /** @class */ (function () {
|
|
|
301
303
|
else {
|
|
302
304
|
secretBuf = encoder.encode(secret);
|
|
303
305
|
}
|
|
306
|
+
if (!this.subtleCrypto)
|
|
307
|
+
throw new Error("Not supported: No Subtle Crypto support");
|
|
304
308
|
_a.label = 1;
|
|
305
309
|
case 1:
|
|
306
310
|
_a.trys.push([1, 3, , 4]);
|
|
@@ -310,11 +314,13 @@ var WebCryptoJWT = /** @class */ (function () {
|
|
|
310
314
|
return [3 /*break*/, 4];
|
|
311
315
|
case 3:
|
|
312
316
|
e_3 = _a.sent();
|
|
313
|
-
console.error("JWT.sign(): Caught error while importing "
|
|
317
|
+
console.error("JWT.sign(): Caught error while importing ".concat(alg, " key: format=").concat(keyFormat, ", importAlgorithm: ").concat(JSON.stringify(importAlgorithm.importKey)));
|
|
314
318
|
console.error(e_3);
|
|
315
319
|
throw e_3;
|
|
316
320
|
case 4:
|
|
317
321
|
messageAsUint8Array = utils_1.Utils.utf8ToUint8Array(partialToken);
|
|
322
|
+
if (!this.subtleCrypto)
|
|
323
|
+
throw new Error("Not supported: No Subtle Crypto support");
|
|
318
324
|
_a.label = 5;
|
|
319
325
|
case 5:
|
|
320
326
|
_a.trys.push([5, 7, , 8]);
|
|
@@ -329,7 +335,7 @@ var WebCryptoJWT = /** @class */ (function () {
|
|
|
329
335
|
throw e_4;
|
|
330
336
|
case 8:
|
|
331
337
|
signatureAsBase64 = base64url_1.Base64URL.stringify(new Uint8Array(signature));
|
|
332
|
-
token = partialToken
|
|
338
|
+
token = "".concat(partialToken, ".").concat(signatureAsBase64);
|
|
333
339
|
return [2 /*return*/, token];
|
|
334
340
|
}
|
|
335
341
|
});
|
|
@@ -339,7 +345,7 @@ var WebCryptoJWT = /** @class */ (function () {
|
|
|
339
345
|
WebCryptoJWT.prototype._decode = function (token) {
|
|
340
346
|
var parts = token.split('.');
|
|
341
347
|
if (parts.length !== 3)
|
|
342
|
-
throw new Error("Invalid token '"
|
|
348
|
+
throw new Error("Invalid token '".concat(token, "': must have 3 parts separated by '.'"));
|
|
343
349
|
return {
|
|
344
350
|
encodedHeader: parts[0],
|
|
345
351
|
encodedPayload: parts[1],
|
|
@@ -361,7 +367,7 @@ var WebCryptoJWT = /** @class */ (function () {
|
|
|
361
367
|
string += '=';
|
|
362
368
|
break;
|
|
363
369
|
default:
|
|
364
|
-
throw new Error("Illegal Base64URL string '"
|
|
370
|
+
throw new Error("Illegal Base64URL string '".concat(string, "'"));
|
|
365
371
|
}
|
|
366
372
|
// TODO Use shim or document incompatible browsers
|
|
367
373
|
return decodeURIComponent(escape(atob(string)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webcrypto-jwt.js","sourceRoot":"","sources":["../../src/browser/webcrypto-jwt.ts"],"names":[],"mappings":";AAAA,wDAAwD;AACxD,4DAA4D;AAC5D,yGAAyG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGzG,yCAAwC;AACxC,iCAAgC;AAChC,oCAA2C;AAE3C,IAAM,UAAU,GAAG;IACf,IAAI,EAAE,EAAE;IACR,KAAK,EAAE;QACH,SAAS,EAAE;YACP,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,SAAS;SAClB;QACD,SAAS,EAAE;YACP,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,SAAS;SAClB;KACJ;IACD,KAAK,EAAE;QACH,SAAS,EAAE;YACP,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,SAAS;SAClB;QACD,SAAS,EAAE;YACP,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,SAAS;SAClB;KACJ;IACD,KAAK,EAAE;QACH,SAAS,EAAE;YACP,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,SAAS;SAClB;QACD,SAAS,EAAE;YACP,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,SAAS;SAClB;KACJ;IACD,KAAK,EAAE;QACH,SAAS,EAAE;YACP,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE,SAAS;SAClB;QACD,SAAS,EAAE;YACP,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE,SAAS;SAClB;KACJ;IACD,KAAK,EAAE;QACH,SAAS,EAAE;YACP,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE,SAAS;SAClB;QACD,SAAS,EAAE;YACP,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE,SAAS;SAClB;KACJ;IACD,KAAK,EAAE;QACH,SAAS,EAAE;YACP,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,OAAO;SACtB;QACD,SAAS,EAAE;YACP,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,OAAO;YACnB,IAAI,EAAE,SAAS;SAClB;KACJ;CACJ,CAAC;AAEF;IACI,sBACY,YAA4B;QAA5B,iBAAY,GAAZ,YAAY,CAAgB;QAEpC,IAAI,CAAC,YAAY;YACb,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAChC,CAAC;IAEK,sCAAe,GAArB,UAAsB,KAAa;;;;gBAC3B,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACvC,sBAAO,EAAE,MAAM,EAAE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAC;;;KAC1D;IAEO,uCAAgB,GAAxB;QACI,IAAI,QAAQ,IAAI,MAAM;YAClB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,UAAU,IAAI,MAAM;YAC1C,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"webcrypto-jwt.js","sourceRoot":"","sources":["../../src/browser/webcrypto-jwt.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
var engine_test_1 = require("../engine.test");
|
|
4
4
|
var index_1 = require("./index");
|
|
5
|
-
engine_test_1.engineTest('WebCryptoJWT', index_1.JWT);
|
|
5
|
+
(0, engine_test_1.engineTest)('WebCryptoJWT', index_1.JWT);
|
|
6
6
|
//# sourceMappingURL=webcrypto-jwt.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webcrypto-jwt.test.js","sourceRoot":"","sources":["../../src/browser/webcrypto-jwt.test.ts"],"names":[],"mappings":";;AAAA,8CAA4C;AAC5C,iCAA8B;AAE9B,wBAAU,
|
|
1
|
+
{"version":3,"file":"webcrypto-jwt.test.js","sourceRoot":"","sources":["../../src/browser/webcrypto-jwt.test.ts"],"names":[],"mappings":";;AAAA,8CAA4C;AAC5C,iCAA8B;AAE9B,IAAA,wBAAU,EAAC,cAAc,EAAE,WAAG,CAAC,CAAC"}
|
package/dist/common/expiry.js
CHANGED
|
@@ -10,10 +10,10 @@ function validateExpiry(exp, now, policy) {
|
|
|
10
10
|
policy = policy || 'when-present';
|
|
11
11
|
now = now || Date.now();
|
|
12
12
|
if (!supportedPolicies.includes(policy))
|
|
13
|
-
throw new Error("Unsupported 'exp' validation strategy '"
|
|
13
|
+
throw new Error("Unsupported 'exp' validation strategy '".concat(policy, "'"));
|
|
14
14
|
if (policy !== 'ignore') {
|
|
15
15
|
if (typeof exp !== 'undefined') {
|
|
16
|
-
if (exp < now)
|
|
16
|
+
if (exp * 1000 < now)
|
|
17
17
|
throw new Error("Token is expired");
|
|
18
18
|
}
|
|
19
19
|
else if (policy === 'force') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expiry.js","sourceRoot":"","sources":["../../src/common/expiry.ts"],"names":[],"mappings":";;;AAAA,SAAgB,cAAc,CAAC,GAAY,EAAE,GAAY,EAAE,MAA4C;IAEnG,6BAA6B;IAE7B,IAAM,iBAAiB,GAAG;QACtB,cAAc,EAAE,OAAO,EAAE,QAAQ;KACpC,CAAC;IAEF,eAAe;IAEf,MAAM,GAAG,MAAM,IAAI,cAAc,CAAC;IAClC,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IAExB,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"expiry.js","sourceRoot":"","sources":["../../src/common/expiry.ts"],"names":[],"mappings":";;;AAAA,SAAgB,cAAc,CAAC,GAAY,EAAE,GAAY,EAAE,MAA4C;IAEnG,6BAA6B;IAE7B,IAAM,iBAAiB,GAAG;QACtB,cAAc,EAAE,OAAO,EAAE,QAAQ;KACpC,CAAC;IAEF,eAAe;IAEf,MAAM,GAAG,MAAM,IAAI,cAAc,CAAC;IAClC,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IAExB,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,iDAA0C,MAAM,MAAG,CAAC,CAAC;IAEzE,IAAI,MAAM,KAAK,QAAQ,EAAE;QACrB,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;YAC5B,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG;gBAChB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;SAC3C;aAAM,IAAI,MAAM,KAAK,OAAO,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;SAC7D;KACJ;AACL,CAAC;AAxBD,wCAwBC"}
|
package/dist/common/index.js
CHANGED
|
@@ -7,7 +7,7 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
|
7
7
|
o[k2] = m[k];
|
|
8
8
|
}));
|
|
9
9
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
-
for (var p in m) if (p !== "default" && !
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
__exportStar(require("./interface"), exports);
|
package/dist/engine.test.js
CHANGED
|
@@ -55,7 +55,7 @@ var ALGORITHMS = {
|
|
|
55
55
|
};
|
|
56
56
|
function engineTest(subjectName, engine) {
|
|
57
57
|
var _this = this;
|
|
58
|
-
razmin_1.suite(function (describe) {
|
|
58
|
+
(0, razmin_1.suite)(function (describe) {
|
|
59
59
|
describe(subjectName, function (it) {
|
|
60
60
|
describe(': Validation', function (it) {
|
|
61
61
|
describe(': alg', function (it) {
|
|
@@ -71,7 +71,7 @@ function engineTest(subjectName, engine) {
|
|
|
71
71
|
return [3 /*break*/, 3];
|
|
72
72
|
case 2:
|
|
73
73
|
e_1 = _a.sent();
|
|
74
|
-
chai_1.expect(e_1.message).to.contain('Token has incorrect algorithm');
|
|
74
|
+
(0, chai_1.expect)(e_1.message).to.contain('Token has incorrect algorithm');
|
|
75
75
|
return [2 /*return*/];
|
|
76
76
|
case 3: throw new Error("Should not accept token with incorrect algorithm");
|
|
77
77
|
}
|
|
@@ -85,7 +85,7 @@ function engineTest(subjectName, engine) {
|
|
|
85
85
|
switch (_a.label) {
|
|
86
86
|
case 0:
|
|
87
87
|
options = { algorithm: 'HS256', secretOrKey: HS256Fixtures.SAMPLE_PUBKEY };
|
|
88
|
-
return [4 /*yield*/, engine.encode({ exp: Date.now() - 1000 }, options)];
|
|
88
|
+
return [4 /*yield*/, engine.encode({ exp: (Date.now() - 1000) / 1000 }, options)];
|
|
89
89
|
case 1:
|
|
90
90
|
token = _a.sent();
|
|
91
91
|
_a.label = 2;
|
|
@@ -97,7 +97,7 @@ function engineTest(subjectName, engine) {
|
|
|
97
97
|
return [3 /*break*/, 5];
|
|
98
98
|
case 4:
|
|
99
99
|
e_2 = _a.sent();
|
|
100
|
-
chai_1.expect(e_2.message).to.contain('Token is expired');
|
|
100
|
+
(0, chai_1.expect)(e_2.message).to.contain('Token is expired');
|
|
101
101
|
return [2 /*return*/];
|
|
102
102
|
case 5: throw new Error("Should not accept an expired token by default");
|
|
103
103
|
}
|
|
@@ -109,7 +109,7 @@ function engineTest(subjectName, engine) {
|
|
|
109
109
|
switch (_a.label) {
|
|
110
110
|
case 0:
|
|
111
111
|
options = { algorithm: 'HS256', secretOrKey: HS256Fixtures.SAMPLE_PUBKEY, validate: { exp: 'force' } };
|
|
112
|
-
return [4 /*yield*/, engine.encode({ exp: Date.now() - 1000 }, options)];
|
|
112
|
+
return [4 /*yield*/, engine.encode({ exp: (Date.now() - 1000) / 1000 }, options)];
|
|
113
113
|
case 1:
|
|
114
114
|
token = _a.sent();
|
|
115
115
|
_a.label = 2;
|
|
@@ -121,7 +121,7 @@ function engineTest(subjectName, engine) {
|
|
|
121
121
|
return [3 /*break*/, 5];
|
|
122
122
|
case 4:
|
|
123
123
|
e_3 = _a.sent();
|
|
124
|
-
chai_1.expect(e_3.message).to.contain('Token is expired');
|
|
124
|
+
(0, chai_1.expect)(e_3.message).to.contain('Token is expired');
|
|
125
125
|
return [2 /*return*/];
|
|
126
126
|
case 5: throw new Error("Should not accept an expired token with validate.exp=force");
|
|
127
127
|
}
|
|
@@ -133,13 +133,13 @@ function engineTest(subjectName, engine) {
|
|
|
133
133
|
switch (_a.label) {
|
|
134
134
|
case 0:
|
|
135
135
|
options = { algorithm: 'HS256', secretOrKey: HS256Fixtures.SAMPLE_PUBKEY, validate: { exp: 'force' } };
|
|
136
|
-
return [4 /*yield*/, engine.encode({ sub: 'abcdef', exp: Date.now() + 10000 }, options)];
|
|
136
|
+
return [4 /*yield*/, engine.encode({ sub: 'abcdef', exp: (Date.now() + 10000) / 1000 }, options)];
|
|
137
137
|
case 1:
|
|
138
138
|
token = _a.sent();
|
|
139
139
|
return [4 /*yield*/, engine.validate(token.string, options)];
|
|
140
140
|
case 2:
|
|
141
141
|
validatedToken = _a.sent();
|
|
142
|
-
chai_1.expect(validatedToken.claims.sub).to.equal('abcdef');
|
|
142
|
+
(0, chai_1.expect)(validatedToken.claims.sub).to.equal('abcdef');
|
|
143
143
|
return [2 /*return*/];
|
|
144
144
|
}
|
|
145
145
|
});
|
|
@@ -162,9 +162,9 @@ function engineTest(subjectName, engine) {
|
|
|
162
162
|
return [3 /*break*/, 5];
|
|
163
163
|
case 4:
|
|
164
164
|
e_4 = _a.sent();
|
|
165
|
-
chai_1.expect(e_4.message).to.contain('Non-expiring tokens are not acceptable');
|
|
165
|
+
(0, chai_1.expect)(e_4.message).to.contain('Non-expiring tokens are not acceptable');
|
|
166
166
|
return [2 /*return*/];
|
|
167
|
-
case 5: throw new Error("Should not accept
|
|
167
|
+
case 5: throw new Error("Should not accept a token without exp claim when configured to require it");
|
|
168
168
|
}
|
|
169
169
|
});
|
|
170
170
|
}); });
|
|
@@ -174,13 +174,13 @@ function engineTest(subjectName, engine) {
|
|
|
174
174
|
switch (_a.label) {
|
|
175
175
|
case 0:
|
|
176
176
|
options = { algorithm: 'HS256', secretOrKey: HS256Fixtures.SAMPLE_PUBKEY, validate: { exp: 'ignore' } };
|
|
177
|
-
return [4 /*yield*/, engine.encode({ sub: 'abcdef', exp: Date.now() - 1000 }, options)];
|
|
177
|
+
return [4 /*yield*/, engine.encode({ sub: 'abcdef', exp: (Date.now() - 1000) / 1000 }, options)];
|
|
178
178
|
case 1:
|
|
179
179
|
token = _a.sent();
|
|
180
180
|
return [4 /*yield*/, engine.validate(token.string, options)];
|
|
181
181
|
case 2:
|
|
182
182
|
validatedToken = _a.sent();
|
|
183
|
-
chai_1.expect(validatedToken.claims.sub).to.equal('abcdef');
|
|
183
|
+
(0, chai_1.expect)(validatedToken.claims.sub).to.equal('abcdef');
|
|
184
184
|
return [2 /*return*/];
|
|
185
185
|
}
|
|
186
186
|
});
|
|
@@ -190,7 +190,7 @@ function engineTest(subjectName, engine) {
|
|
|
190
190
|
Object.keys(ALGORITHMS).forEach(function (alg) { return testAlgorithm(alg, ALGORITHMS[alg]); });
|
|
191
191
|
function testAlgorithm(algorithm, fixtures) {
|
|
192
192
|
var _this = this;
|
|
193
|
-
describe(": Algorithm="
|
|
193
|
+
describe(": Algorithm=".concat(algorithm), function () { return __awaiter(_this, void 0, void 0, function () {
|
|
194
194
|
var _this = this;
|
|
195
195
|
return __generator(this, function (_a) {
|
|
196
196
|
it('can verify a token', function () { return __awaiter(_this, void 0, void 0, function () {
|
|
@@ -203,8 +203,8 @@ function engineTest(subjectName, engine) {
|
|
|
203
203
|
})];
|
|
204
204
|
case 1:
|
|
205
205
|
token = _a.sent();
|
|
206
|
-
chai_1.expect(token.claims.sub).to.equal("1234567890");
|
|
207
|
-
chai_1.expect(token.claims.iat).to.equal(1516239022);
|
|
206
|
+
(0, chai_1.expect)(token.claims.sub).to.equal("1234567890");
|
|
207
|
+
(0, chai_1.expect)(token.claims.iat).to.equal(1516239022);
|
|
208
208
|
return [2 /*return*/];
|
|
209
209
|
}
|
|
210
210
|
});
|
|
@@ -224,7 +224,7 @@ function engineTest(subjectName, engine) {
|
|
|
224
224
|
return [3 /*break*/, 3];
|
|
225
225
|
case 2:
|
|
226
226
|
e_5 = _a.sent();
|
|
227
|
-
chai_1.expect(e_5.message).to.contain('Invalid signature');
|
|
227
|
+
(0, chai_1.expect)(e_5.message).to.contain('Invalid signature');
|
|
228
228
|
return [2 /*return*/];
|
|
229
229
|
case 3: throw new Error('Engine should have detected forgery');
|
|
230
230
|
}
|
|
@@ -245,7 +245,7 @@ function engineTest(subjectName, engine) {
|
|
|
245
245
|
return [3 /*break*/, 3];
|
|
246
246
|
case 2:
|
|
247
247
|
e_6 = _a.sent();
|
|
248
|
-
chai_1.expect(e_6.message).to.contain('Invalid signature');
|
|
248
|
+
(0, chai_1.expect)(e_6.message).to.contain('Invalid signature');
|
|
249
249
|
return [2 /*return*/];
|
|
250
250
|
case 3: throw new Error('Engine should have failed to verify');
|
|
251
251
|
}
|
|
@@ -273,13 +273,13 @@ function engineTest(subjectName, engine) {
|
|
|
273
273
|
})];
|
|
274
274
|
case 3:
|
|
275
275
|
validatedToken = _a.sent();
|
|
276
|
-
chai_1.expect(validatedToken.claims.iat).to.equal(1598181440);
|
|
276
|
+
(0, chai_1.expect)(validatedToken.claims.iat).to.equal(1598181440);
|
|
277
277
|
return [3 /*break*/, 5];
|
|
278
278
|
case 4:
|
|
279
279
|
e_7 = _a.sent();
|
|
280
280
|
console.error("Caught error during .sign() test:");
|
|
281
281
|
console.error(e_7);
|
|
282
|
-
throw new Error("Should be able to validate signed token '"
|
|
282
|
+
throw new Error("Should be able to validate signed token '".concat(token.string, "', caught error: ").concat(e_7));
|
|
283
283
|
case 5: return [2 /*return*/];
|
|
284
284
|
}
|
|
285
285
|
});
|
package/dist/engine.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.test.js","sourceRoot":"","sources":["../src/engine.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAA+B;AAC/B,6BAA8B;AAE9B,wDAA0D;AAC1D,wDAA0D;AAC1D,wDAA0D;AAC1D,wDAA0D;AAC1D,wDAA0D;AAC1D,wDAA0D;AAW1D,IAAM,UAAU,GAAG;IACf,KAAK,EAAE,aAAa;IACpB,KAAK,EAAE,aAAa;IACpB,KAAK,EAAE,aAAa;IACpB,KAAK,EAAE,aAAa;IACpB,KAAK,EAAE,aAAa;IACpB,KAAK,EAAE,aAAa;CACvB,CAAC;AAEF,SAAgB,UAAU,CAAC,WAAoB,EAAE,MAAkB;IAAnE,iBAgJC;IA/IG,cAAK,
|
|
1
|
+
{"version":3,"file":"engine.test.js","sourceRoot":"","sources":["../src/engine.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
|
7
7
|
o[k2] = m[k];
|
|
8
8
|
}));
|
|
9
9
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
-
for (var p in m) if (p !== "default" && !
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
exports.createJWTEngine = void 0;
|
package/dist/node/engine.test.js
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
var engine_test_1 = require("../engine.test");
|
|
4
4
|
var index_1 = require("./index");
|
|
5
|
-
engine_test_1.engineTest('NodeJWT', index_1.JWT);
|
|
5
|
+
(0, engine_test_1.engineTest)('NodeJWT', index_1.JWT);
|
|
6
6
|
//# sourceMappingURL=engine.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.test.js","sourceRoot":"","sources":["../../src/node/engine.test.ts"],"names":[],"mappings":";;AAAA,8CAA4C;AAC5C,iCAA8B;AAE9B,wBAAU,
|
|
1
|
+
{"version":3,"file":"engine.test.js","sourceRoot":"","sources":["../../src/node/engine.test.ts"],"names":[],"mappings":";;AAAA,8CAA4C;AAC5C,iCAA8B;AAE9B,IAAA,wBAAU,EAAC,SAAS,EAAE,WAAG,CAAC,CAAC"}
|
package/dist/node/index.js
CHANGED
|
@@ -7,7 +7,7 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
|
7
7
|
o[k2] = m[k];
|
|
8
8
|
}));
|
|
9
9
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
-
for (var p in m) if (p !== "default" && !
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
11
|
};
|
|
12
12
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
13
13
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
@@ -83,21 +83,22 @@ var NodeJWT = /** @class */ (function () {
|
|
|
83
83
|
return __generator(this, function (_b) {
|
|
84
84
|
try {
|
|
85
85
|
claims = jsonwebtoken.verify(string, options.secretOrKey, {
|
|
86
|
-
algorithms: [options.algorithm]
|
|
86
|
+
algorithms: [options.algorithm],
|
|
87
|
+
ignoreExpiration: true
|
|
87
88
|
});
|
|
88
89
|
}
|
|
89
90
|
catch (e) {
|
|
90
91
|
if (e.message === 'invalid signature') // For uniformity
|
|
91
|
-
throw new Error("Cannot validate JWT '"
|
|
92
|
+
throw new Error("Cannot validate JWT '".concat(string, "': Invalid signature"));
|
|
92
93
|
else if (e.message === 'invalid algorithm')
|
|
93
|
-
throw new Error("Cannot validate JWT '"
|
|
94
|
+
throw new Error("Cannot validate JWT '".concat(string, "': Token has incorrect algorithm"));
|
|
94
95
|
throw e;
|
|
95
96
|
}
|
|
96
97
|
try {
|
|
97
|
-
common_1.validateExpiry(claims.exp, options.now, (_a = options.validate) === null || _a === void 0 ? void 0 : _a.exp);
|
|
98
|
+
(0, common_1.validateExpiry)(claims.exp, options.now, (_a = options.validate) === null || _a === void 0 ? void 0 : _a.exp);
|
|
98
99
|
}
|
|
99
100
|
catch (e) {
|
|
100
|
-
throw new Error("Cannot validate JWT '"
|
|
101
|
+
throw new Error("Cannot validate JWT '".concat(string, "': ").concat(e.message));
|
|
101
102
|
}
|
|
102
103
|
return [2 /*return*/, {
|
|
103
104
|
string: string,
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,2CAA6C;AAE7C,oCAA2C;AAC3C,4CAA0B;AAE1B;IAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,2CAA6C;AAE7C,oCAA2C;AAC3C,4CAA0B;AAE1B;IAAA;IA8CA,CAAC;IA7CS,iCAAe,GAArB,UAAsB,KAAa;;;;gBAC3B,YAAY,GAAuB,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAClE,sBAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,EAAC;;;KAClD;IAEK,wBAAM,GAAZ,UAAa,MAA2B,EAAE,OAAsB;;;;gBACxD,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE;oBACxD,SAAS,EAAO,OAAO,CAAC,SAAS;iBACpC,CAAC,CAAC;gBAEH,sBAAO;wBACH,MAAM,QAAA;wBACN,MAAM,QAAA;qBACT,EAAA;;;KACJ;IAEK,0BAAQ,GAAd,UAAe,MAAe,EAAE,OAAsB;;;;;gBAGlD,IAAI;oBACA,MAAM,GAAuB,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE;wBAC1E,UAAU,EAAE,CAAO,OAAO,CAAC,SAAS,CAAE;wBACtC,gBAAgB,EAAE,IAAI;qBACzB,CAAC,CAAC;iBACN;gBAAC,OAAO,CAAC,EAAE;oBACR,IAAI,CAAC,CAAC,OAAO,KAAK,mBAAmB,EAAO,iBAAiB;wBACzD,MAAM,IAAI,KAAK,CAAC,+BAAwB,MAAM,yBAAsB,CAAC,CAAC;yBACrE,IAAI,CAAC,CAAC,OAAO,KAAK,mBAAmB;wBACtC,MAAM,IAAI,KAAK,CAAC,+BAAwB,MAAM,qCAAkC,CAAC,CAAC;oBAEtF,MAAM,CAAC,CAAC;iBACX;gBAED,IAAI;oBACA,IAAA,uBAAc,EAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,MAAA,OAAO,CAAC,QAAQ,0CAAE,GAAG,CAAC,CAAC;iBAClE;gBAAC,OAAO,CAAC,EAAE;oBACR,MAAM,IAAI,KAAK,CAAC,+BAAwB,MAAM,gBAAM,CAAC,CAAC,OAAO,CAAE,CAAC,CAAC;iBACpE;gBAED,sBAAO;wBACH,MAAM,QAAA;wBACN,MAAM,QAAA;qBACT,EAAA;;;KACJ;IAEL,cAAC;AAAD,CAAC,AA9CD,IA8CC;AA9CY,0BAAO;AAgDpB,SAAgB,eAAe,KAAiB,OAAO,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC;AAAvE,0CAAuE;AAAA,CAAC;AAC3D,QAAA,GAAG,GAAG,eAAe,EAAE,CAAC"}
|
package/dist/test.js
CHANGED
package/dist/test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";;AAAA,iCAA+B;AAC/B,cAAK,
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";;AAAA,iCAA+B;AAC/B,IAAA,cAAK,GAAE;KACF,OAAO,CAAC;IACL,mBAAmB;CACtB,CAAC;KACD,GAAG,EAAE,CACT"}
|
package/karma.conf.ts
CHANGED
|
@@ -9,19 +9,14 @@ export = function (config : karma.Config) {
|
|
|
9
9
|
{ pattern: 'src/browser/**/*.test.ts' }
|
|
10
10
|
],
|
|
11
11
|
browsers: ['Chrome'],
|
|
12
|
-
|
|
13
12
|
preprocessors: {
|
|
14
13
|
'**/*.test.ts': ['webpack']
|
|
15
14
|
},
|
|
16
|
-
plugins: [
|
|
17
|
-
'karma-webpack',
|
|
18
|
-
'karma-material-reporter',
|
|
19
|
-
'karma-sourcemap-loader',
|
|
20
|
-
'karma-chrome-launcher'
|
|
21
|
-
],
|
|
22
|
-
|
|
23
15
|
webpack: {
|
|
24
16
|
devtool: 'inline-source-map',
|
|
17
|
+
externals: {
|
|
18
|
+
fs: 'undefined'
|
|
19
|
+
},
|
|
25
20
|
module: {
|
|
26
21
|
rules: [
|
|
27
22
|
{
|
|
@@ -47,13 +42,7 @@ export = function (config : karma.Config) {
|
|
|
47
42
|
},
|
|
48
43
|
},
|
|
49
44
|
|
|
50
|
-
reporters: [
|
|
51
|
-
|
|
52
|
-
//'material'
|
|
53
|
-
],
|
|
54
|
-
|
|
55
|
-
webpackMiddleware: {
|
|
56
|
-
stats: 'errors-only',
|
|
57
|
-
},
|
|
45
|
+
reporters: [ 'progress' ],
|
|
46
|
+
webpackMiddleware: { stats: 'errors-only' },
|
|
58
47
|
});
|
|
59
48
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@astronautlabs/jwt",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "An isomorphic JWT library (works in browser and Node.js)",
|
|
5
5
|
"main": "dist/node/index.js",
|
|
6
6
|
"browser": "dist/browser/index.js",
|
|
@@ -24,23 +24,22 @@
|
|
|
24
24
|
"@types/node": "14.0.4",
|
|
25
25
|
"atob": "^2.1.2",
|
|
26
26
|
"chai": "^4.2.0",
|
|
27
|
-
"karma": "^
|
|
27
|
+
"karma": "^6.3.4",
|
|
28
28
|
"karma-chrome-launcher": "^3.1.0",
|
|
29
29
|
"karma-material-reporter": "^1.1.2",
|
|
30
30
|
"karma-sourcemap-loader": "^0.3.7",
|
|
31
|
-
"karma-typescript": "^5.
|
|
31
|
+
"karma-typescript": "^5.5.2",
|
|
32
32
|
"karma-webpack": "^4.0.2",
|
|
33
|
-
"razmin": "^
|
|
33
|
+
"razmin": "^1.1.5",
|
|
34
34
|
"ts-loader": "^8.0.2",
|
|
35
35
|
"ts-node": "^8.10.2",
|
|
36
|
-
"typescript": "^
|
|
36
|
+
"typescript": "^4.5.5",
|
|
37
37
|
"webpack": "^4.44.1",
|
|
38
38
|
"zone.js": "^0.11.1"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@trust/webcrypto": "^0.9.2",
|
|
42
42
|
"btoa": "^1.2.1",
|
|
43
|
-
"jsonwebtoken": "^8.5.1"
|
|
44
|
-
"karma-jasmine": "^4.0.1"
|
|
43
|
+
"jsonwebtoken": "^8.5.1"
|
|
45
44
|
}
|
|
46
45
|
}
|
|
@@ -90,8 +90,6 @@ export class WebCryptoJWT implements JWTEngine {
|
|
|
90
90
|
this.subtleCrypto = crypto.subtle || crypto['webkitSubtle'];
|
|
91
91
|
if (!this.subtleCrypto && 'msCrypto' in window)
|
|
92
92
|
this.subtleCrypto = window['msCrypto'].Subtle;
|
|
93
|
-
if (!this.subtleCrypto)
|
|
94
|
-
throw new Error(`Not supported: No Subtle Crypto support`);
|
|
95
93
|
}
|
|
96
94
|
|
|
97
95
|
|
|
@@ -160,7 +158,7 @@ export class WebCryptoJWT implements JWTEngine {
|
|
|
160
158
|
if (!importAlgorithm)
|
|
161
159
|
throw new Error(`Algorithm ${alg} is not supported`);
|
|
162
160
|
|
|
163
|
-
let keyFormat :
|
|
161
|
+
let keyFormat : 'raw' | 'spki';
|
|
164
162
|
let secretBuf : ArrayBuffer;
|
|
165
163
|
let encoder = new TextEncoder();
|
|
166
164
|
|
|
@@ -186,6 +184,9 @@ export class WebCryptoJWT implements JWTEngine {
|
|
|
186
184
|
|
|
187
185
|
let key : CryptoKey;
|
|
188
186
|
|
|
187
|
+
if (!this.subtleCrypto)
|
|
188
|
+
throw new Error(`Not supported: No Subtle Crypto support`);
|
|
189
|
+
|
|
189
190
|
try {
|
|
190
191
|
key = await this.subtleCrypto.importKey(
|
|
191
192
|
keyFormat,
|
|
@@ -216,6 +217,9 @@ export class WebCryptoJWT implements JWTEngine {
|
|
|
216
217
|
// TODO Test utf8ToUint8Array function
|
|
217
218
|
let signatureAsUint8Array = Base64URL.parse(signaturePart);
|
|
218
219
|
|
|
220
|
+
if (!this.subtleCrypto)
|
|
221
|
+
throw new Error(`Not supported: No Subtle Crypto support`);
|
|
222
|
+
|
|
219
223
|
try {
|
|
220
224
|
return await this.subtleCrypto.verify(
|
|
221
225
|
importAlgorithm.operation,
|
|
@@ -244,7 +248,7 @@ export class WebCryptoJWT implements JWTEngine {
|
|
|
244
248
|
if (alg === 'none')
|
|
245
249
|
return `${partialToken}.`;
|
|
246
250
|
|
|
247
|
-
let keyFormat = 'raw';
|
|
251
|
+
let keyFormat : 'raw' | 'pkcs8' = 'raw';
|
|
248
252
|
let encoder = new TextEncoder();
|
|
249
253
|
let secretBuf : ArrayBuffer;
|
|
250
254
|
|
|
@@ -263,6 +267,10 @@ export class WebCryptoJWT implements JWTEngine {
|
|
|
263
267
|
secretBuf = encoder.encode(secret);
|
|
264
268
|
}
|
|
265
269
|
|
|
270
|
+
|
|
271
|
+
if (!this.subtleCrypto)
|
|
272
|
+
throw new Error(`Not supported: No Subtle Crypto support`);
|
|
273
|
+
|
|
266
274
|
let key : CryptoKey;
|
|
267
275
|
|
|
268
276
|
try {
|
|
@@ -281,6 +289,10 @@ export class WebCryptoJWT implements JWTEngine {
|
|
|
281
289
|
|
|
282
290
|
let messageAsUint8Array = Utils.utf8ToUint8Array(partialToken);
|
|
283
291
|
|
|
292
|
+
|
|
293
|
+
if (!this.subtleCrypto)
|
|
294
|
+
throw new Error(`Not supported: No Subtle Crypto support`);
|
|
295
|
+
|
|
284
296
|
let signature : ArrayBuffer;
|
|
285
297
|
|
|
286
298
|
try {
|
package/src/common/expiry.ts
CHANGED
|
@@ -16,7 +16,7 @@ export function validateExpiry(exp : number, now : number, policy : 'ignore' | '
|
|
|
16
16
|
|
|
17
17
|
if (policy !== 'ignore') {
|
|
18
18
|
if (typeof exp !== 'undefined') {
|
|
19
|
-
if (exp < now)
|
|
19
|
+
if (exp * 1000 < now)
|
|
20
20
|
throw new Error(`Token is expired`);
|
|
21
21
|
} else if (policy === 'force') {
|
|
22
22
|
throw new Error(`Non-expiring tokens are not acceptable`);
|
package/src/engine.test.ts
CHANGED
|
@@ -46,7 +46,7 @@ export function engineTest(subjectName : string, engine : JWTEngine) {
|
|
|
46
46
|
describe(': exp', it => {
|
|
47
47
|
it('rejects expired tokens by default', async () => {
|
|
48
48
|
let options = { algorithm: 'HS256', secretOrKey: HS256Fixtures.SAMPLE_PUBKEY };
|
|
49
|
-
let token = await engine.encode({ exp: Date.now() - 1000 }, options);
|
|
49
|
+
let token = await engine.encode({ exp: (Date.now() - 1000) / 1000 }, options);
|
|
50
50
|
|
|
51
51
|
try {
|
|
52
52
|
await engine.validate(token.string, options)
|
|
@@ -60,7 +60,7 @@ export function engineTest(subjectName : string, engine : JWTEngine) {
|
|
|
60
60
|
|
|
61
61
|
it('rejects expired tokens with validate.exp=force', async () => {
|
|
62
62
|
let options : DecodeOptions = { algorithm: 'HS256', secretOrKey: HS256Fixtures.SAMPLE_PUBKEY, validate: { exp: 'force' } };
|
|
63
|
-
let token = await engine.encode({ exp: Date.now() - 1000 }, options);
|
|
63
|
+
let token = await engine.encode({ exp: (Date.now() - 1000) / 1000 }, options);
|
|
64
64
|
|
|
65
65
|
try {
|
|
66
66
|
await engine.validate(token.string, options)
|
|
@@ -74,7 +74,7 @@ export function engineTest(subjectName : string, engine : JWTEngine) {
|
|
|
74
74
|
|
|
75
75
|
it('accepts fresh tokens with validate.exp=force', async () => {
|
|
76
76
|
let options : DecodeOptions = { algorithm: 'HS256', secretOrKey: HS256Fixtures.SAMPLE_PUBKEY, validate: { exp: 'force' } };
|
|
77
|
-
let token = await engine.encode({ sub: 'abcdef', exp: Date.now() + 10000 }, options);
|
|
77
|
+
let token = await engine.encode({ sub: 'abcdef', exp: (Date.now() + 10000) / 1000 }, options);
|
|
78
78
|
|
|
79
79
|
let validatedToken = await engine.validate(token.string, options)
|
|
80
80
|
expect(validatedToken.claims.sub).to.equal('abcdef');
|
|
@@ -91,12 +91,12 @@ export function engineTest(subjectName : string, engine : JWTEngine) {
|
|
|
91
91
|
return;
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
throw new Error(`Should not accept
|
|
94
|
+
throw new Error(`Should not accept a token without exp claim when configured to require it`);
|
|
95
95
|
});
|
|
96
96
|
|
|
97
97
|
it('accepts expired tokens when configured to do so', async () => {
|
|
98
98
|
let options : DecodeOptions = { algorithm: 'HS256', secretOrKey: HS256Fixtures.SAMPLE_PUBKEY, validate: { exp: 'ignore' } };
|
|
99
|
-
let token = await engine.encode({ sub: 'abcdef', exp: Date.now() - 1000 }, options);
|
|
99
|
+
let token = await engine.encode({ sub: 'abcdef', exp: (Date.now() - 1000) / 1000 }, options);
|
|
100
100
|
let validatedToken = await engine.validate(token.string, options);
|
|
101
101
|
expect(validatedToken.claims.sub).to.equal('abcdef');
|
|
102
102
|
});
|
package/src/node/index.ts
CHANGED
|
@@ -26,7 +26,8 @@ export class NodeJWT implements JWTEngine {
|
|
|
26
26
|
|
|
27
27
|
try {
|
|
28
28
|
claims = <Record<string,any>>jsonwebtoken.verify(string, options.secretOrKey, {
|
|
29
|
-
algorithms: [ <any>options.algorithm ]
|
|
29
|
+
algorithms: [ <any>options.algorithm ],
|
|
30
|
+
ignoreExpiration: true
|
|
30
31
|
});
|
|
31
32
|
} catch (e) {
|
|
32
33
|
if (e.message === 'invalid signature') // For uniformity
|