JWT
jwt에 대한 설명은 이전 포스트에 있다.
JWT 모듈 등록
JWT 모듈을 사용하려면 다른 모듈에 import를 시켜야 한다.
import { JwtModule } from '@nestjs/jwt';
@Module({
imports: [JwtModule.register({})],
})
export class AuthModule {}
위와 같이 등록하면 된다.
JWT 모듈 메서드
JWT모듈 클래스에는 4개의 메서드가 있다.
import { DynamicModule } from '@nestjs/common';
import { JwtModuleAsyncOptions, JwtModuleOptions } from './interfaces/jwt-module-options.interface';
export declare class JwtModule {
static register(options: JwtModuleOptions): DynamicModule;
static registerAsync(options: JwtModuleAsyncOptions): DynamicModule;
private static createAsyncProviders;
private static createAsyncOptionsProvider;
}
- register : JwtModuleOptions 인터페이스에 정의된 옵션들을 받아서 JwtModule을 동기적으로 등록하는 메서드이다.
- registerAsync : JwtModuleAsyncOptions 인터페이스에 정의된 옵션들을 받아서 JwtModule을 비동기적으로 등록하는 메서드이다.
- createAsyncProviders : JwtModuleAsyncOptions 인터페이스에 정의된 옵션들을 받아서 JwtModule에 필요한 비동기적인 프로바이더들을 생성하는 메서드다. 해당 메서드는 내부적으로 사용되는 메서드이다. 외부에서 호출 불가.
- createAsyncOptionsProvider : JwtModuleAsyncOptions 인터페이스에 정의된 옵션들을 받아서 JwtModuleOptions 프로바이더를 생성하는 메서드이다. 해당 메서드는 내부적으로 사용되는 메서드이다. 외부에서 호출 불가.
즉 JWT 모듈을 등록하는 방법은 register, registerAsync 두 가지 방법이 있다. register는 일반적인 등록 방법이고, registerAsync는 비동기적으로 option 을 가져와야 할 경우 사용한다.
JWT 모듈 register 옵션
JwtModule.register({}) 옵션에는 총 8가지가 있다.
- global : JwtModule을 전역 모듈로 등록할지 여부를 나타낸다. 전역 모듈로 등록하면 다른 모듈에서 재사용할 수 있다.
- signOptions : JWT를 생성할 때 사용할 옵션들을 나타낸다. 알고리즘, 만료 시간 등등을 설정할 수 있다.
- secret : JWT를 생성하고 검증할 때 사용할 비밀 키이다. 문자열이나 버퍼 형식이어야 한다.
- publicKey : 비대칭 알고리즘을 사용하는 경우 JWT를 검증할 때 사용할 공개 키다. 문자열이나 버퍼 형식이어야 한다.
- privateKey : 비대칭 알고리즘을 사용할 때 JWT를 생성할 때 사용할 개인 키다. 문자열이나 버퍼 형식이어야 한다.
- secretOrPrivateKey : secret과 privateKey의 별칭이다. 이 속성은 deprecated 되었다.
- secretOrKeyProvider : JWT를 생성하고 검증할 때 동적으로 비밀 키나 공개 키를 제공하는 함수를 나타낸다. 이 함수는 requestType, tokenOrPayload, options 세 개의 매개변수를 받고, 비동기적으로 jwt.Secret을 반환한다
- verifyOptions : JWT를 검증할 때 사용할 옵션들을 나타낸다. 알고리즘 등을 설정 할 수 있다.
@Module({
imports: [JwtModule.register({ secret: "secret_key", signOptions: { algorithm: "HS512" } })],
})
JWT 모듈 registerAsync 옵션
JwtModule.registerAsync({}) 옵션은 총 7가지가 있다.
- global : JwtModule을 전역 모듈로 등록할지 여부를 나타낸다. register의 global 옵션과 같다.
- useExisting : 기존의 서비스를 재사용하여 JwtModuleOptions을 제공하는 방식이다. JwtOptionsFactory 인터페이스를 구현해야 한다.
- useClass : 새로운 클래스를 인스턴스화하여 JwtModuleOptions을 제공하는 방식이다. JwtOptionsFactory 인터페이스를 구현해야 한다.
- useFactory : 팩토리 함수를 호출하여 JwtModuleOptions을 제공하는 방식이다. JwtModuleOptions을 동기적이나 비동기적으로 반환해야 한다.
- inject : useFactory에 필요한 의존성들이다.
- extraProviders : JwtModule에 추가적인 프로바이더들을 나타낸다.
- imports : JwtModule에 필요한 다른 모듈들을 import 한다.
import { Module } from "@nestjs/common";
import { JwtModule } from "@nestjs/jwt";
import { ConfigService } from "@nestjs/config";
@Module({
imports: [
JwtModule.registerAsync({
useFactory: (configService: ConfigService) => ({
secret: configService.get<string>("JWT_SECRET_KEY"),
}),
inject: [ConfigService],
}),
],
})
위와 같이 하면 추가적인 secret key를 설정할 필요가 없다.
개인 기록용입니다. 만약 잘못된 부분이 있다면 댓글로 알려주신다면 감사하겠습니다!
'프레임워크\라이브러리 > Nest.js' 카테고리의 다른 글
[NestJS] 구글 로그인 (2)/JWT 발급 (0) | 2024.03.03 |
---|---|
[NestJS] 구글 로그인 (1)/구글 OAuth 적용 (1) | 2024.02.28 |
[NestJS] Guard (0) | 2024.02.22 |
[NestJS] 커스텀 파이프 (0) | 2024.02.20 |
[NestJS] 파이프 (1) | 2024.02.18 |