web-service/apps/auth/src/providers/keys.providers.ts

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),
},
];