NestJS JWT 토큰 유효 시간 설정하는 방법
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 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 정보는 알고 계셨나요? ▼
'Programming & Platform > NestJS' 카테고리의 다른 글
NestJS createQueryBuilder 사용하는 방법, 예시코드 (0) | 2024.01.10 |
---|---|
NestJS TypeORM 트랜잭션 사용방법, 예시코드 (0) | 2024.01.06 |
NestJS 빠른 테스트를 위한 명령어 npm run start:dev (0) | 2024.01.05 |
NestJS ejs 적용하는 방법, 동적 웹페이지 렌더링 하기 (0) | 2024.01.04 |
NestJS 앱의 시작, main.ts 기본 구조 (0) | 2023.12.27 |