Simple authorization package for Node.js.
npm i @jnode/auth
const { AuthService } = require('@jnode/auth');
const crypto = require('crypto');// Generate a pair of keys for demonstration
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
modulusLength: 2048,
});
// Initialize the service
const auth = new AuthService(publicKey, privateKey);
// Sign a token
const token = auth.signToken({ alg: 'RSA-SHA256' }, { userId: 123, role: 'admin' });
// Example token output:
// ABR7ImFsZyI6IlJTQS1TSEEyNTYifQAdeyJ1c2VySWQiOjEyMywicm9sZSI6ImFkbWluIn1JG1YPNJNfZ2jA29DcqiU_HojNAC34mz0ueYYOZ45nbHg86Q_Q7RULHsQfMp1tn0AdeGC9gStX1QK-fCB7Qgt3kF85qCtlDcYywDrjwmg19H0XnWeD27fXCOmmcM-rLjkVe61WDEb8rktmtlMJAUtivDYJr8RxyI2kQF-ZddlrgukjzRtua2_FmWmohb5MeahhfQ6xmlM1HRbYSMlUBaGjSxx_Q4s3wNrpMNDWiDM0adA1iHH5h00VRo2t5iepytOY3YunEW3_UXKcqr9PZ8KV-ikW2mXXp45Xw39U96dkeD3M9dR3vexL8yBc8kNDeT6a8YpHb63HW8s6LUlV_jzB
// Verify a token
try {
const decoded = auth.verifyToken(token);
console.log('Decoded:', decoded);
/*
Output:
{
header: { alg: 'RSA-SHA256' },
payload: { userId: 123, role: 'admin' }
}
*/
} catch (err) {
console.error('Verification failed:', err.message);
}@jnode/auth provides a lightweight and binary-safe alternative to JWT, focusing on a straightforward token format encoded in base64url.
The token structure is as follows:
- Header Length: 2 bytes (UInt16BE)
- Header JSON: n bytes
- Payload Length: 2 bytes (UInt16BE)
- Payload JSON: n bytes
- Signature: RSA-SHA256 signature of the preceding segments (bytes 1 through 4).
This format ensures that the token is self-contained and tamper-proof while being extremely efficient to parse without complex regex or split operations.
The main class to handle signing and verification of tokens.
publicKey<string> | <Buffer> | <KeyObject> The public key used for verification.privateKey<string> | <Buffer> | <KeyObject> The private key used for signing.
header<Object> | <Buffer> Token header data. Default:{}.payload<Object> | <Buffer> Token payload data. Default:{}.privateKey<string> | <Buffer> | <KeyObject>- Returns: <string> A
base64urlencoded token.
Signs the provided header and payload using the RSA-SHA256 algorithm.
token<string> | <Buffer> The token to verify.publicKey<string> | <Buffer> | <KeyObject>- Returns: <Object> An object containing
{ header, payload }.
Parses and verifies the token. Throws an Error if the signature is invalid or TypeError if keys are missing.
Instance method that uses the privateKey provided in the constructor to sign a token.
Instance method that uses the publicKey provided in the constructor to verify a token.