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