icynet-auth-server/src/modules/jwt/jwt.service.ts

45 lines
1.2 KiB
TypeScript

import { Inject, Injectable } from '@nestjs/common';
import { ConfigurationService } from '../config/config.service';
import * as jwt from 'jsonwebtoken';
/**
* Generate JWTs using the following commands:
* Private: ssh-keygen -t rsa -b 4096 -m PEM -f jwt.private.pem
* Public: openssl rsa -in jwt.private.pem -pubout -outform PEM -out jwt.public.pem
*/
@Injectable()
export class JWTService {
constructor(
@Inject('JWT_PRIVATE_KEY') private _privateKey: Buffer,
@Inject('JWT_PUBLIC_KEY') private _publicKey: Buffer,
private _config: ConfigurationService,
) {}
public issue(
claims: Record<string, unknown>,
subject: string,
audience?: string,
): string {
return jwt.sign(claims, this._privateKey, {
algorithm: this._config.get('jwt.algorithm'),
issuer: this._config.get('jwt.issuer'),
expiresIn: this._config.get('jwt.expiration'),
subject,
audience,
});
}
public verify(
token: string,
subject?: string,
audience?: string,
): jwt.JwtPayload {
return jwt.verify(token, this._publicKey, {
algorithms: [this._config.get('jwt.algorithm')],
issuer: this._config.get('jwt.issuer'),
subject,
audience,
}) as jwt.JwtPayload;
}
}