[TIL] NestJS 공부 31일차

정인교·2021년 7월 6일
0

TIL(Today I Learned)

목록 보기
42/67
post-thumbnail

31일차부터 기술에서 보안으로 주요 주제를 바꿨다.

인증

애플리케이션에서 인증을 대부분 해야하는데 이 때 node.js 인증 라이브러리로 passport를 사용할 수 있다고한다. 일정 단계를 수행해야한다고 한다.

  • "자격 증명" (예: 사용자 이름/암호, JSON 웹 토큰 (JWT) 또는 아이덴티티 제공업체의 아이덴티티 토큰)을 확인하여 사용자를 인증합니다.
  • 인증 상태 관리 (JWT와 같은 포터블 토큰 발행 또는 Express 세션 생성)
  • 인증된 사용자에 대한 정보를 라우트 핸들러에서 나중에 사용할 수 있도록 Request 객체에 첨부합니다.

passport 설치

npm install --save @nestjs/passport passport passport-local
npm install --save-dev @types/passport-local

설치할 모듈들이 4개나 된다.
dev옵션과 save옵션을 잘 구분해서 설치해야한다.

passport 전략 구현

passport에선 전략이라는 개념을 사용해서 전략이라 적었지만 그냥 사용하기 라고 생각하면 편할 것 같다.
우선 이 글에선 vanilla Passport작동 방식을 고려한다고합니다.

@nestjs/passport를 사용하면 PassportStrategy 클래스를 확장하여 Passport 전략을 구성하는데 자세한건 코드를 사용하면서 알아갑시다.

폴더 생성

nest g module auth
nest g service auth

nest 명령어로 auth module 및 auth service 디렉토리를 만든 후
UsersService를 캡슐화하여 AuthService를 만드는 것이 편하기에 또 만들어줍니다.

nest g module users
nest g service users

코드 작성(Users)

users/users.service.ts파일을 위와같이 수정해주자. 하드코딩된 메모리 내 사용자 목록과 사용자 이름별로 검색하는 findOne메서드를 추가한 내용입니다.

users/users.module.ts부분에서 export부분에 UsersService를 추가시켜주는 코드입니다.

코드 작성(Auth)

auth/auth.service.ts사용자 검색 및 암호 확인 작업을 담당하는 파일입니다. validateUser메서드를 생성해주는 코드입니다.

auth.module.ts부분입니다. 그냥 UserModule가져오는 코드를 추가했습니다.

로컬 인증 전략

authlocal.strategy.ts를 만들고 아래 코드를 작성해봅시다.
구성옵션이 없으므로 그냥 생성자는 super()을 이용하면 됩니다. validate도 구현된 것을 확인할 수 있습니다.

유효성 검사는 AuthService에서 수행되는데 그저 validate()에서 사용자가 발견되고 자격 증명이 유효하다면 Passport가 작업을 완료하는 것이고 찾을 수 없다면 예외를 발생시켜 예외 레이어(Exception Filter)가 처리할 수 있게 만들어줍니다.

각 전략의 validate()메서드는 사용자의 존재 및 유효 결정입니다. 예를 들어 프로젝트에서 주로 진행하는 JWT에선 디코딩된 토큰을 확인하여 DB와 확인 후 일치하는 것을 평가하는 방법도 있는 것처럼 유효성 검사 패턴은 확장 가능합니다.

어쨌든 방금 만든 코드는 AuthModule에 구성을 해야 사용할 수 있으니 다시 바꿔줍시다.
이렇게 한번에 수정할 수 있는걸 따로 나눈 이유는 local기능을 빼거나 넣을 수 있으니 한번 더 수정한 것입니다.

로그인 라우터 구현

이렇게 전략들을 구현했다면 app.controller.ts에서 로그인 부분을 만들어서 인증 부분을 확인해봅시다.
app.controller.ts를 아래처럼 수정합시다.
확인은 할 수 없고 맥을 사용하지 못하니 curl이 아닌 postman으로 확인해봅시다.

정상적으로 작동하는 것을 확인할 수 있습니다 ㅎㅎ

profile
백엔드 개발자 정인교입니다!

0개의 댓글

관련 채용 정보