33 lines
1.0 KiB
TypeScript
33 lines
1.0 KiB
TypeScript
import { FactoryProvider } from '@nestjs/common';
|
|
import { ConfigService } from '@nestjs/config';
|
|
import { promises as fs } from 'fs';
|
|
import * as jose from 'jose';
|
|
|
|
/**
|
|
* ssh-keygen -t rsa -b 4096 -m PKCS8 -f jwt.private.pem
|
|
* openssl rsa -in jwt.private.pem -pubout -outform PEM -out jwt.public.pem
|
|
*/
|
|
export const keysProviders = [
|
|
<FactoryProvider>{
|
|
provide: 'APP_PRIVATE_KEY',
|
|
inject: [ConfigService],
|
|
useFactory: async (config: ConfigService) =>
|
|
fs
|
|
.readFile(config.get('security.privateKeyPath'), 'utf-8')
|
|
.then((key) => jose.importPKCS8(key, 'RS512')),
|
|
},
|
|
<FactoryProvider>{
|
|
provide: 'APP_PUBLIC_KEY',
|
|
inject: [ConfigService],
|
|
useFactory: async (config: ConfigService) =>
|
|
fs
|
|
.readFile(config.get('security.publicKeyPath'), 'utf-8')
|
|
.then((key) => jose.importSPKI(key, 'RS512')),
|
|
},
|
|
<FactoryProvider>{
|
|
provide: 'APP_PUBLIC_KEY_JWK',
|
|
inject: ['APP_PUBLIC_KEY'],
|
|
useFactory: async (key: jose.KeyLike) => jose.exportJWK(key),
|
|
},
|
|
];
|