본문 바로가기
Programming & Platform/NestJS

NestJS JWT 토큰 유효 시간 설정하는 방법

by 코드스니펫 2023. 12. 28.
반응형

NestJS JWT 토큰 유효 시간 설정하는 방법

 

NestJS Logo

 

NestJS에서 JWT(Json Web Token)을 사용하여 인증을 구현할 때, 토큰의 유효 시간을 설정하는 것은 중요한 보안 고려 사항 중 하나입니다. 이 글에서는 Nest.js의 JwtModule을 사용하여 JWT 토큰의 유효 시간을 설정하는 방법에 대해 알아보겠습니다.

 

 

NestJS에서 JWT 사용하는 방법

 

1. 모듈 생성 및 설정

먼저, Nest.js 애플리케이션에서 사용자 모듈(UserModule)과 인증 모듈(AuthModule)을 생성합니다. AuthModule에서는 Passport 및 JwtModule을 설정합니다.

 

 

// auth.module.ts

import { UserModule } from 'src/user/user.module';
import { Module } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { JwtModule } from '@nestjs/jwt';
import { PassportModule } from '@nestjs/passport';
import { JwtStrategy } from './jwt.strategy';

@Module({
  imports: [
    PassportModule.register({ defaultStrategy: 'jwt', session: false }),
    JwtModule.registerAsync({
      useFactory: (configService: ConfigService) => ({
        secret: configService.get<string>('JWT_SECRET_KEY'),
      }),
      inject: [ConfigService],
    }),
    UserModule, // 사용자 모듈 추가
  ],
  providers: [JwtStrategy],
})
export class AuthModule {}

 

 

2. Passport 및 JwtModule 설정

PassportModule은 Nest.js에서 인증을 처리하는데 사용되며, JwtModule은 JWT 토큰 생성 및 검증을 담당합니다. 위의 코드에서 PassportModule는 'jwt' 전략을 기본으로 사용하며, JwtModule은 비동기로 설정되어 JWT의 시크릿 키 및 유효 시간을 동적으로 가져오게 됩니다.

 

 

3. JwtStrategy 구현

JwtStrategy는 JwtModule에서 사용할 JWT 전략을 구현한 클래스입니다. 이 클래스에서는 유효한 토큰인지를 검증하는 로직이 들어갑니다.

 

 

// jwt.strategy.ts

import { Injectable } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import { ExtractJwt, Strategy } from 'passport-jwt';
import { ConfigService } from '@nestjs/config';

@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
  constructor(private readonly configService: ConfigService) {
    super({
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      ignoreExpiration: false,
      secretOrKey: configService.get<string>('JWT_SECRET_KEY'),
    });
  }

  async validate(payload: any) {
    return { userId: payload.sub, username: payload.username };
  }
}

 

 

4. 토큰 유효 시간 설정

JwtModule.registerAsync 메서드의 signOptions 속성을 사용하여 토큰의 유효 시간을 설정합니다. 여기서는 '10m'으로 설정하여 10분 동안 토큰이 유효하도록 합니다.

 

signOptions: {
  expiresIn: '10m', // 10분 설정
},

 

이렇게 하면 JWT 토큰의 유효 시간이 10분으로 설정되며, 애플리케이션에서 사용자의 인증을 안전하게 처리할 수 있습니다. 이러한 구성을 통해 유효 시간을 제어함으로써 보안을 강화하고 악의적인 공격으로부터 시스템을 보호할 수 있습니다.

 

 

JWT의 expiresIn 시간 설정 방법

 

JWT(Json Web Token)에서 expiresIn은 토큰이 얼마 동안 유효한지를 나타내는 설정입니다. Nest.js의 JwtModule을 사용하여 토큰의 만료 시간을 설정하는 방법에 대해 알아보겠습니다.

 

 

jwt.io JWT Token 복호화 사이트 사용법

jwt.io JWT Token 복호화 사이트 사용법 JWT (JSON Web Token)는 웹 애플리케이션에서 사용자 인증과 정보 교환을 위한 표준 방식 중 하나입니다. JWT 토큰은 암호화되어 있어서 토큰을 읽기 위해서는 복호

lemonlog.tistory.com

JWT Token 값을 바로 복호화 할 수 있어요

 

1. 설정 기본값

expiresIn의 기본값은 초(second) 단위입니다. Nest.js에서는 이 값을 문자열로 표현하며, '30s'는 30초를 나타냅니다.

 

JwtModule.registerAsync({
  useFactory: async (configService: ConfigService) => ({
    secret: configService.get<string>('JWT_SECRET_KEY'),
    signOptions: {
      expiresIn: '30s', // 30초 설정
    },
  }),
  inject: [ConfigService],
}),

 

 

2. 분 단위로 설정

만약 토큰의 만료 시간을 분(minute) 단위로 설정하고 싶다면 '30m'과 같이 표현합니다.

 

JwtModule.registerAsync({
  useFactory: async (configService: ConfigService) => ({
    secret: configService.get<string>('JWT_SECRET_KEY'),
    signOptions: {
      expiresIn: '30m', // 30분 설정
    },
  }),
  inject: [ConfigService],
}),

 

 

3. 시간 단위로 설정

시간(hour) 단위로 설정하고 싶다면 '2h'와 같이 표현합니다.

 

JwtModule.registerAsync({
  useFactory: async (configService: ConfigService) => ({
    secret: configService.get<string>('JWT_SECRET_KEY'),
    signOptions: {
      expiresIn: '2h', // 2시간 설정
    },
  }),
  inject: [ConfigService],
}),

 

 

4. 일 단위로 설정

일(day) 단위로 설정하고 싶다면 '7d'와 같이 표현합니다.

 

JwtModule.registerAsync({
  useFactory: async (configService: ConfigService) => ({
    secret: configService.get<string>('JWT_SECRET_KEY'),
    signOptions: {
      expiresIn: '7d', // 7일 설정
    },
  }),
  inject: [ConfigService],
}),

 

이렇게 토큰의 만료 시간을 설정함으로써 보안과 토큰의 유효 기간을 조절할 수 있습니다. 적절한 만료 시간 설정은 시스템의 보안성을 높이는 데 기여합니다.

 

▼ 아래 NestJS 정보는 알고 계셨나요? ▼

 

 

NestJS 앱의 시작, main.ts 기본 구조

NestJS 앱의 시작, main.ts 기본 구조 우리의 NestJS 앱이 여기서 시작됩니다. main.ts 파일은 우리 앱의 진입점이자, 새로운 모험의 문을 열어주는 열쇠입니다. 이 코드를 통해 앱이 어떻게 생성되고 구

lemonlog.tistory.com

 

 

TypeScript 학습 체크리스트 - boolean, number, String, tuple, enum, 배열의 사용법

TypeScript 학습 체크리스트 - boolean, number, String, tuple, enum, 배열의 사용법 TypeScript 강의 수강 후 배운 내용을 정리하고 궁금한 부분 추가하면서 작성해봤습니다. TypeScript 개념 체크리스트 ✅ ✅ boole

lemonlog.tistory.com