Agent/server/scripts/generate-jwt-keys.js

42 lines
1.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env node
'use strict';
/**
* 生成 JWT 用 Ed25519 密钥对PEM
* 用法node scripts/generate-jwt-keys.js [--force]
* 输出目录默认apps/server/keys/(已 gitignore
*/
const fs = require('fs');
const path = require('path');
const { generateKeyPairSync } = require('crypto');
const { DEFAULT_DIR, DEFAULT_PRIVATE, DEFAULT_PUBLIC } = require('../src/auth/jwt-keys');
const force = process.argv.includes('--force');
function main() {
if (!force && (fs.existsSync(DEFAULT_PRIVATE) || fs.existsSync(DEFAULT_PUBLIC))) {
console.error('密钥已存在。若要覆盖请加 --force');
console.error(` private: ${DEFAULT_PRIVATE}`);
console.error(` public: ${DEFAULT_PUBLIC}`);
process.exit(1);
}
fs.mkdirSync(DEFAULT_DIR, { recursive: true, mode: 0o700 });
const { privateKey, publicKey } = generateKeyPairSync('ed25519');
const privPem = privateKey.export({ type: 'pkcs8', format: 'pem' });
const pubPem = publicKey.export({ type: 'spki', format: 'pem' });
fs.writeFileSync(DEFAULT_PRIVATE, privPem, { mode: 0o600 });
fs.writeFileSync(DEFAULT_PUBLIC, pubPem, { mode: 0o644 });
console.log('已生成 Ed25519 JWT 密钥对:');
console.log(` private: ${DEFAULT_PRIVATE} (mode 600)`);
console.log(` public: ${DEFAULT_PUBLIC}`);
console.log('可选 .env');
console.log(` JWT_PRIVATE_KEY_PATH=${DEFAULT_PRIVATE}`);
console.log(` JWT_PUBLIC_KEY_PATH=${DEFAULT_PUBLIC}`);
console.log(' JWT_KEY_ID=ed25519-1');
}
main();