init test
This commit is contained in:
40
generate-jwks.ts
Normal file
40
generate-jwks.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
import * as jose from 'jose';
|
||||
import fs from 'node:fs'
|
||||
async function generateKeyPair() {
|
||||
const { privateKey, publicKey } = await jose.generateKeyPair('RS256', {
|
||||
modulusLength: 2048,
|
||||
extractable: true,
|
||||
});
|
||||
|
||||
return { privateKey, publicKey };
|
||||
}
|
||||
|
||||
async function createJWKS(publicKey: CryptoKey) {
|
||||
const jwk = await jose.exportJWK(publicKey);
|
||||
// 添加 kid 字段
|
||||
jwk.kid = 'kid-key-1';
|
||||
const jwks = {
|
||||
keys: [jwk]
|
||||
};
|
||||
return jwks;
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const { privateKey, publicKey } = await generateKeyPair();
|
||||
const jwks = await createJWKS(publicKey);
|
||||
|
||||
// 将私钥和 JWKS 保存到文件
|
||||
const privateJWK = await jose.exportJWK(privateKey);
|
||||
const privatePEM = await jose.exportPKCS8(privateKey);
|
||||
const publicPEM = await jose.exportSPKI(publicKey);
|
||||
fs.writeFileSync('jwt/publicKey.txt', publicPEM);
|
||||
|
||||
fs.writeFileSync('jwt/privateKey.txt', privatePEM);
|
||||
|
||||
fs.writeFileSync('jwt/privateKey.json', JSON.stringify(privateJWK, null, 2));
|
||||
fs.writeFileSync('jwt/jwks.json', JSON.stringify(jwks, null, 2));
|
||||
|
||||
console.log('Private key and JWKS have been saved to files.');
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
Reference in New Issue
Block a user