rauth
Version:
Authentication and Authorization library via JWT
64 lines • 5.35 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// tslint:disable-next-line:max-line-length
const jsonwebtoken_1 = require("jsonwebtoken");
const from_key_like_1 = __importDefault(require("jose/jwk/from_key_like"));
const crypto_1 = __importDefault(require("crypto"));
// tslint:disable-next-line:max-line-length
const defaultPrivateKeyRS512 = Buffer.from('LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBbnp5aXMxWmpmTkIwYkJnS0ZNU3Z2a1R0d2x2QnNhSnE3UzV3QStremVWT1ZwVld3CmtXZFZoYTRzMzhYTS9wYS95cjQ3YXY3K3ozVlRtdkRSeUFIY2FUOTJ3aFJFRnBMdjljajVsVGVKU2lieXIvTXIKbS9ZdGpDWlZXZ2FPWUlod3JYd0tMcVByLzExaW5Xc0FrZkl5dHZIV1R4WllFY1hMZ0FYRnVVdWFTM3VGOWdFaQpOUXd6R1RVMXYwRnFrcVRCcjRCOG5XM0hDTjQ3WFV1MHQ4WTBlK2xmNHM0T3hRYXdXRDc5SjkvNWQzUnkwdmJWCjNBbTFGdEdKaUp2T3dSc0lmVkNoRHBZU3RUY0hUQ01xdHZXYlY2TDExQldrcHpHWFNXNEh2NDNxYStHU1lPRDIKUVU2OE1iNTlvU2syT0IrQnRPTHBKb2ZtYkdFR2d2bXd5Q0k5TXdJREFRQUJBb0lCQUNpQVJxMndrbHRqdGNqcwprRnZaN3cxSkFPUkhiRXVmRU8xRXUyN3pPSWxxYmd5QWNBbDdxKy8xYmlwNFoveDFJVkVTODQveVRhTThwMGdvCmFtTWh2Z3J5L21TOHZOaTFCTjJTQVpFbmIvN3hTeGJmbGI3MGJYOVJITEpxS25wNUdaZTJqZXh3K3d5WGx3YU0KK2JjbFVDcmg5ZTFsdEg3SXZVclJyUW5GSmZoK2lzMWZSb245Q285TGkwR3dvTjB4MGJ5cnJuZ1U4QWszWTZEOQpEOEdqUUE0RWxtOTRTVDNpekp2OGlDT0xTREJtenNQc1hmY0NVWmZtVGZaNURiVURNYk14Um5TbzNuUWVvS0dDCjBMajlGa1djZm1MY3BHbFNYVE8rV3cxTDdFR3ErUFQzTnRSYWUxRlpQd2pkZFExLzRWOTA1a3lRRkxhbUFBNVkKbFNwRTJ3a0NnWUVBeTFPUExRY1p0NE5RblF6UHoyU0JKcVFOMlA1dTN2WGwrek5WS1A4dzRlQnYwdld1SkpGKwpoa0dOblN4WFFyVGt2RE9JVWRkU0tPekhIZ1NnNG5ZNkswMmVjeVQwUFBtL1VadnRScFdybkJqY0VWdEhFSk5wCmJVOXBMRDVpWjBKOXNielBVL0x4UG11QVAyQnM4Sm1UbjZhRlJzcEZyUDdXMHMxTm1rMmpzbTBDZ1lFQXlIMFgKK2pwb3F4ajRlZlpma1VyZzVHYlNFaGYrZFpnbGYwdFRPQTViVmc4SVl3dG1Oay9wbmlMRy96STdjK0dsVGM5QgpCd2ZNcjU5RXpCcS9lRk1JNytMZ1hhVlVzTS9zUzRSeSt5ZUs2U0p4L290SU1XdERmcXhzTEQ4Q1BNQ1J2ZWNDCjJQaXA0dVNncmwwTU9lYmw5WEtwNTdHb2FVV1JXUkhxd1Y0WTZoOENnWUFaaEk0bWg0cVp0bmhLalk0VEtEangKUVl1ZlhTZExBaTl2M0Z4bXZjaER3T2duNEwrUFJWZE13RE5tczJic0wwbTV1UG4xMDRFek02dzF2enoxendLego1cFRwUEkwT2pnV04xM1RxOCtQS3ZtLzRHYTJNamdPZ1BXUWtzbHVsTy9vTWNYYlB3V0MzaGNSZHI5dGNRdG45CkltZjluMnNwTC82RURGSWQrSHAvN1FLQmdBcWxXZGlYc1dja2RFMUZuOTEvTkdIc2M4c3lLdmpqazFvbkRjdzAKTnZWaTV2Y2JhOW9HZEVsSlgzZTlteHFVS01ydzdtc0pKdjFNWDhMV3lNUUM1TDZZTllIRGZiUEYxcTVMNGk4ago4bVJleDk3VVZva0pRUlJBNDUyVjJ2Q082UzVFVGdwbmFkMzZkZTNNVXhIZ0NPWDNxTDM4MlF4OS9USFZtYm1hCjNZZlJBb0dBVXhML0V1NXl2TUs4U0F0L2RKSzZGZWRuZ2NNM0pFRk5wbG10TFlWTFdoa0lsTlJHRHdrZzNJNUsKeTE4QWU5bjdkSFZ1ZXlzbHJiNndlcTdkVGtZRGkzaU9ZUlc4SFJrSVFoMDZ3RWRieHQwc2hUekFKdnZDUWZyQgpqZy8zNzQ3V1NzZi96QlRjSGloVFJCZEF2Nk9tZGhWNC9kRDVZQmZMQWtMcmQrbVg3aUU9Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0t', 'base64');
// tslint:disable-next-line:max-line-length
const defaultPublicKeyRS512 = Buffer.from('LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFuenlpczFaamZOQjBiQmdLRk1Tdgp2a1R0d2x2QnNhSnE3UzV3QStremVWT1ZwVld3a1dkVmhhNHMzOFhNL3BhL3lyNDdhdjcrejNWVG12RFJ5QUhjCmFUOTJ3aFJFRnBMdjljajVsVGVKU2lieXIvTXJtL1l0akNaVldnYU9ZSWh3clh3S0xxUHIvMTFpbldzQWtmSXkKdHZIV1R4WllFY1hMZ0FYRnVVdWFTM3VGOWdFaU5Rd3pHVFUxdjBGcWtxVEJyNEI4blczSENONDdYVXUwdDhZMAplK2xmNHM0T3hRYXdXRDc5SjkvNWQzUnkwdmJWM0FtMUZ0R0ppSnZPd1JzSWZWQ2hEcFlTdFRjSFRDTXF0dldiClY2TDExQldrcHpHWFNXNEh2NDNxYStHU1lPRDJRVTY4TWI1OW9TazJPQitCdE9McEpvZm1iR0VHZ3Ztd3lDSTkKTXdJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0t', 'base64');
checkWarningPublicKeyVulnerable.warned = false;
function checkWarningPublicKeyVulnerable(secretOrPublicKey) {
if (!checkWarningPublicKeyVulnerable.warned && defaultPublicKeyRS512 === secretOrPublicKey) {
checkWarningPublicKeyVulnerable.warned = true;
process.emitWarning('You are using a vulnerable key.', 'JsonWebTokenControl#secretOrPublicKey');
}
return secretOrPublicKey;
}
class JWTControl {
constructor(opts) {
this.opts = opts;
this.algorithm = this.opts?.algorithm ?? this.opts?.secret ? 'HS512' : 'RS512';
this.signOptions = {
algorithm: this.algorithm,
...this.opts?.signOptions,
};
this.verifyOptions = {
algorithms: [this.algorithm],
...this.opts?.verifyOptions,
};
this.secretOrPrivateKey = this.opts?.secret ?? this.opts?.privateKey ?? defaultPrivateKeyRS512;
this.secretOrPublicKey = checkWarningPublicKeyVulnerable(this.opts?.secret ?? this.opts?.publicKey ?? defaultPublicKeyRS512);
}
sign(payload, options) {
return jsonwebtoken_1.sign(payload, this.secretOrPrivateKey, {
...this.signOptions,
...options,
});
}
decode(token, options) {
return jsonwebtoken_1.decode(token, options);
}
verify(token, options) {
return jsonwebtoken_1.verify(token, this.secretOrPublicKey, {
...this.verifyOptions,
...options,
});
}
async toJWK() {
return {
...await from_key_like_1.default(crypto_1.default.createPublicKey({
key: this.secretOrPublicKey,
format: 'pem',
})),
alg: this.signOptions.algorithm,
kid: this.signOptions.keyid,
};
}
}
exports.JWTControl = JWTControl;
//# sourceMappingURL=JWTControl.js.map