Nest

[Nest] passport

chu_dw 2024. 3. 4. 18:37

passport란?

passport는 NestJs에서 인증을 위한 미들웨어 라이브로리로

다양한 인증 전략을 제공하여 사용자를 인증하고 권한 부여를 할 수 있게해준다.

 

passport 전략

로컬 전략 : 사용자 아이디와 비밀번호를 이용한 인증 전략

JWT 전략 : jwt를 이용한 인증을 처리하는 전략

OAuth 전략 : OAuth 프로토콜 이용한 인증 처리

등과 같이 다양한 인증 전략을 제공하고 실제로 사용자를 인증하고 식별한다.

 

 

passPort 장점

다양한 전략을 지원한다.  전략을 모듈화 하여 제동하므로 유연성이 높다. 

다른 http 프레임워크와 통합이 간편하다.

 

프로젝트에서 passport

현재 프로젝트에서 passport와 jwt모듈이 postbox(user역할) 모듈에서 import되고 있었는데

사용하는 곳이 없어서 뭐가 뭔지 정리하는지 좀 걸렸다.

일단 user역할 하는 모듈에서는 jwt 생성만 해주고 따로 검증을 할필요가 없다

 

 

헷갈리는 것

 

1. JwtModule에 지금 해주고 있는 설정은 어디에 사용되는가

JwtModule은 jwt관련 기능을 제공하는 모듈이고 .register()로 설정해준다.

설정된 jwtModule은 jwtService와 jwtStrategy에서 사용된다.

jwtService는 jwt 토큰을 생성하고 해석하는데 사용된다.

jwtStrategy는 Passport의 전략으로, 요청의 jwt 토큰을 검증하고 인증 로직을 처리한다.

 

2. JwtModule설정 해주는 위치

지금 postBox모듈에서 JwtModule을 설정 해주고 있는데 letter모듈에서도 따로 모듈 provider 설정 없이

import {JwtService} from @nestjs/jwt 하여 jwtService를 사용하고 있다.

JwtService는 NestJs의 의존성 주입을 통해 생성되며 jwtModule에서 설정한 옵션은 자동으로 주입되어 사용된다고 한다.

 

3. postbox모듈에 passport 필요성

일단 현재 코드에서 저 passportModule이 사용되고 있는지 알아보면

일단 jwtStratege에서 passport-jwt검증 코드를 구현하고 있다.

JwtStrategy의 사용은 직접 컨트롤러에 사용되는게 아니라 guard로 사용된다고 한다.

그럼 일단 postbox에선 passport를 사용하고 있지 않다.

그런데 passport를 guard로 사용하는게 이해가 안된다.

분명 passport는 미들웨어고, guard는 미들웨어 작동 후 작동하는걸로 알고 있었고 둘이 비슷한 역할이라

생각하고 있었기 때문이다.

 

passport와 guard

passport는 인증을 수행하는데 사용되는 도구로 특정 인증 방법에 대한 구현을 담당한다.

guard는 특정 라우터에 접근하는 요청을 인증하고 인가를 담당한다.

즉 passport 전략을 통해 요청을 검증하고 해당 검증된 내용을 guard가 라우터로 전달할지 말지 결정하는 것이다.

 

그럼 프로젝트에서 구현 했던 guard를 다시보면 해당 guard의 경우 passport를 사용하지 않고 구현 하였다.

조금 와닫는대로 표현해보면 위 코드에서 헤더로 받은 토큰을 직접 해석하고 일치하는지 확인하고 있는데

이 코드를 passport를 사용하면 strategy에 한번만 설정하고 사용하는 느낌으로 이해하였다.

 

정리해보면 내 프로젝트에선 passport를 정의만 해주고 전혀 사용하고 있지 않았다.

모듈 import해주는 부분도 정리를 좀 해줘야 할 거 같다.