[NestJS] JWT(JSON Web Token) - 로그인 API 구현과 암호화

2024. 8. 10. 19:56·Back/NestJS

 

JWT(JSON Web Token)는 클라이언트와 서버 간에 정보를 안전하게 전달하기 위해 사용되는 토큰이다

크게 헤더(header), 페이로드(payload), 서명(signature) 세 부분으로 구성되는데, 이 세 부분이 결합되어 하나의 토큰을 형성한다

 

JWT 토큰을 구현하기 위해서는 Access Token과 Refresh Token 이렇게 두 종류의 토큰이 사용된다

이 두 가지 토큰은 각기 다른 목적과 특성을 가지고 있으며, 보안성과 사용자 경험을 동시에 고려한 토큰 관리 방법이다.

 

Access Token

[목적] 

Access Token은 사용자 인증을 위해 사용된다

이 토큰은 클라이언트가 서버에 API 요청을 보낼 때 포함되며, 서버는 이 토큰을 사용해 요청이 인증된 사용자인지 확인한다

 

[life cycle]

Access Token은 보통 짧은 life cycle 을 가진다

life cycle은 15분에서 1시간 정도로 설정한다

이렇게 life cycle을 짧게 설정하는 이유는 토큰이 탈취되었을 때, 잠재적인 피해를 최소화하기 위해서다

 

[사용]

 사용자가 로그인하면 서버는 Access Token을 발급하고, 클라이언트(예: 웹 브라우저 또는 모바일 앱)는 이 토큰을 저장한다

이후 클라이언트는 서버에 요청을 보낼 때마다 이 토큰을 포함하여 보낸다

서버는 이 토큰을 검증하여 요청을 처리한다

 

Refresh Token

[목적] 

Refresh Token은 Access Token을 재발급받기 위해 사용된다

사용자의 액세스 토큰이 만료되었을 때, 다시 로그인을 요구하지 않고 새로운 Access Token을 발급받을 수 있도록 돕는다

 

[life cycle]

 Refresh Token은 Access Token보다 훨씬 긴 life cycle을 가진다

며칠에서 몇 주, 또는 몇 달까지도 설정한다

 

[사용]

사용자가 로그인을 할 때, 서버는 Access Token과 함께 Refresh Token을 발급한다

클라이언트는 Refresh Token을 안전하게 저장하고 있다가, Access Token이 만료되면 이 Refresh Token을 사용해 서버에서 새로운 Access Token을 요청한다.

서버는 Refresh Token을 검증하고, 유효하다면 새로운 Access Token을 발급한다.

 

NestJS에서 JWT를 사용해 로그인 API 구현하기

1. auth 모듈을 만든다

nest g resource

 

모듈 이름은 auth로 만들기

 

그럼 이렇게 모듈이 생성된다

 

2. JWT 인증을 위해 몇 가지 패키지를 설치해야 한다

- jwt와 bcrypt를 설치해주자

yarn add yarn add @nestjs/jwt bcrypt

 

 

3. auth.module.ts에서 JWT를 설정하고, AuthService에서 실제로 JWT를 생성하고 검증하는 로직을 작성한다

// auth.module.ts
import { Module } from '@nestjs/common';
import { JwtModule } from '@nestjs/jwt';
import { PassportModule } from '@nestjs/passport';
import { AuthService } from './auth.service';
import { AuthController } from './auth.controller';
import { JwtStrategy } from './jwt.strategy'; // 이 부분은 아래에서 설명할 것입니다.
import { UsersModule } from '../users/users.module'; // UsersModule에서 사용자 관련 데이터를 관리한다고 가정

@Module({
  imports: [
    UsersModule,
    PassportModule,
    JwtModule.register({
      secret: 'your-secret-key', // 실제 애플리케이션에서는 환경 변수로 관리해야 함
      signOptions: { expiresIn: '60m' }, // 토큰 유효기간 설정
    }),
  ],
  providers: [AuthService, JwtStrategy],
  controllers: [AuthController],
})
export class AuthModule {}

 

To be continue...

저작자표시 (새창열림)

'Back > NestJS' 카테고리의 다른 글

페이지네이션(Pagenation) 구현하기 - (1)  (0) 2025.03.12
[NextJS] 프로젝트 생성하기 with Yarn berry 4.4.0  (0) 2025.01.26
[NestJs] @InjectRepository 데코레이터 with TypeORM  (1) 2024.07.27
[Node.js] 블로킹 / 논블로킹  (0) 2023.03.28
[Node.js] 이벤트 루프 (event loop)  (0) 2023.03.28
'Back/NestJS' 카테고리의 다른 글
  • 페이지네이션(Pagenation) 구현하기 - (1)
  • [NextJS] 프로젝트 생성하기 with Yarn berry 4.4.0
  • [NestJs] @InjectRepository 데코레이터 with TypeORM
  • [Node.js] 블로킹 / 논블로킹
soyeon26
soyeon26
  • soyeon26
    개발 일지
    soyeon26
  • 전체
    오늘
    어제
    • 분류 전체보기 (107)
      • Web (22)
        • Web (1)
        • HTTP (0)
      • Language (29)
        • Java Script (3)
        • Type Srcipt (1)
        • Java (25)
      • Front (19)
        • HTML+CSS (4)
        • React (15)
      • Back (41)
        • Spring(Springboot) (9)
        • JSP (21)
        • Database (5)
        • NestJS (6)
      • Devops (6)
        • Docker (1)
        • Git & SVN (5)
      • App (7)
        • Android (7)
      • IT 정보 (3)
  • 블로그 메뉴

    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Spring
    Java
    java의 정석
    React
    SSR
    스프링부트
    자바스크립트set
    강의후기
    Next.js 필요성
    과학기술인 등록번호 발급
    sql강의
    Next.js
    과학기술인등록번호 조회
    과학기술인번호 조회
    React Next.js
    csrvsssr
    과학기술인 번호 발급
    데이터베이스 강의
    csr과ssr의 차이
    김영한
    중복제거
    javascript
    과학기술인 등록
    프론트엔드
    springboot
    인프런
    백엔드
    SQL강의 추천
    서블릿
    강의 후기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
soyeon26
[NestJS] JWT(JSON Web Token) - 로그인 API 구현과 암호화
상단으로

티스토리툴바