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);
}
}
위의 예시에서 RolesGuard
는 user.role
이 requiredRoles
배열에 포함되어 있는지를 확인하는 기능을 수행합니다.
결론
NestJS에서 인증과 권한 부여를 구현하는 방법에 대해 알아보았습니다. Passport.js를 사용하여 서버 사이드 애플리케이션에서 인증 기능을 구현하고, AuthGuard
를 상속받아 권한 부여 기능을 구현할 수 있습니다. NestJS의 다양한 미들웨어를 활용하여 보안 요구사항을 충족시킬 수 있습니다.
더 많은 정보를 찾으려면 NestJS 공식 문서를 참조하세요.
#NestJS #Passport.js