NestJS에서의 자바스크립트 인증 및 권한 부여 방법

NestJS는 서버 사이드 애플리케이션을 개발하기 위한 프레임워크로, Node.js 및 TypeScript 기반으로 동작합니다. 이 프레임워크를 사용하여 인증과 권한 부여를 구현하는 방법에 대해 알아보겠습니다.

1. Passport.js를 사용한 인증

Passport.js는 Node.js용 인증 미들웨어이며, 다양한 인증 방식을 지원합니다. NestJS에서도 Passport.js를 사용하여 인증 기능을 쉽게 구현할 수 있습니다.

먼저, 필요한 패키지를 설치해야 합니다:

$ npm install @nestjs/passport passport passport-local

다음으로, AuthModule을 생성하고 @Module 데코레이터 안에서 PassportModule을 import해야 합니다:

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

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

이제 로그인 기능을 추가할 수 있습니다. /login 엔드포인트에서 LocalAuthGuard를 사용하여 username과 password 인증을 수행합니다:

import { Controller, Post, Request, UseGuards } from '@nestjs/common';
import { LocalAuthGuard } from './local-auth.guard';

@Controller()
export class AuthController {
  @UseGuards(LocalAuthGuard)
  @Post('login')
  async login(@Request() req) {
    return req.user;
  }
}

LocalAuthGuard는 Passport.js에서 제공하는 AuthGuard를 상속받아 구현됩니다:

import { Injectable } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';

@Injectable()
export class LocalAuthGuard extends AuthGuard('local') {}

2. 권한 부여

NestJS에서는 AuthGuard를 사용하여 간단한 권한 부여도 가능합니다. 예를 들어, 특정 경로로의 요청이 특정 권한을 갖고 있는지를 검사할 수 있습니다.

권한이 필요한 경로에 @UseGuards 데코레이터와 RolesGuard를 적용합니다:

import { Controller, Get, UseGuards } from '@nestjs/common';
import { RolesGuard } from './roles.guard';

@Controller('cats')
@UseGuards(RolesGuard)
export class CatsController {
  @Get()
  findAll() {
    // ...
  }
}

RolesGuard에서는 AuthGuard와 마찬가지로 CanActivate 인터페이스를 구현하여 권한 검사를 수행합니다:

import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';

@Injectable()
export class RolesGuard implements CanActivate {
  constructor(private readonly requiredRoles: string[]) {}

  canActivate(context: ExecutionContext): boolean {
    const { user } = context.switchToHttp().getRequest();
    // 권한 검사 로직을 구현합니다.
    return this.requiredRoles.includes(user.role);
  }
}

위의 예시에서 RolesGuarduser.rolerequiredRoles 배열에 포함되어 있는지를 확인하는 기능을 수행합니다.

결론

NestJS에서 인증과 권한 부여를 구현하는 방법에 대해 알아보았습니다. Passport.js를 사용하여 서버 사이드 애플리케이션에서 인증 기능을 구현하고, AuthGuard를 상속받아 권한 부여 기능을 구현할 수 있습니다. NestJS의 다양한 미들웨어를 활용하여 보안 요구사항을 충족시킬 수 있습니다.

더 많은 정보를 찾으려면 NestJS 공식 문서를 참조하세요.

#NestJS #Passport.js