[typescript] Nest.js에서 타입스크립트로 인증 및 권한 부여 구현하기

Nest.js는 타입스크립트로 구축된 서버 사이드 애플리케이션을 만들 수 있게 해주는 프레임워크입니다. 이 글에서는 Nest.js 애플리케이션에서 사용자 인증 및 권한 부여를 구현하는 방법을 알아보겠습니다.

목차

Passport 모듈 설정

Nest.js에서 Passport 모듈을 사용하여 사용자의 로컬 또는 소셜 미디어 인증을 구현할 수 있습니다. 우선, Passport 모듈을 애플리케이션에 설정하고 인증 전략을 구성해야 합니다.

import { Module } from '@nestjs/common';
import { PassportModule } from '@nestjs/passport';

@Module({
  imports: [
    PassportModule.register({ defaultStrategy: 'jwt' }),
  ],
})
export class AuthModule {}

사용자 모델 및 서비스 생성

다음으로, 사용자 모델과 사용자 관련 비즈니스 로직을 담당할 서비스를 생성해야 합니다. 사용자 모델은 주로 데이터베이스 스키마와 일치하며, 서비스는 사용자 관련 로직을 처리합니다.

// user.model.ts
export class User {
  id: number;
  username: string;
  password: string;
}

// user.service.ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class UserService {
  // 사용자 관련 비즈니스 로직 구현
}

JWT 토큰 발급 및 검증

인증된 사용자에게 JWT(JSON Web Token) 토큰을 발급하고, 요청 시 해당 토큰을 검증하여 인가된 사용자인지 확인해야합니다. jsonwebtoken 패키지를 사용하여 토큰을 발급 및 검증할 수 있습니다.

import * as jwt from 'jsonwebtoken';

const token = jwt.sign({ username: user.username, sub: user.id }, secretKey, { expiresIn: '1h' });

// 토큰 검증
const decoded = jwt.verify(token, secretKey);

권한 부여 미들웨어 작성

마지막으로, Nest.js에서는 권한 부여를 위해 미들웨어를 작성하여 요청에 대한 권한을 검사할 수 있습니다. 예를 들어, 특정 엔드포인트에 대한 접근 권한을 검사하는 미들웨어를 작성할 수 있습니다.

import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response } from 'express';

@Injectable()
export class AuthMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: Function) {
    // 권한 검사 로직 구현
    next();
  }
}

위와 같이 Nest.js에서는 타입스크립트를 사용하여 간단하게 사용자 인증 및 권한 부여를 구현할 수 있습니다. Nest.js의 강력한 모듈 시스템과 타입 안정성을 활용하여 보안적인 애플리케이션을 구축할 수 있습니다.

관련 참고 자료: Nest.js 공식 문서