
안녕하세요. 오늘은 NEST.JS로 Jwt를 생성하고 Guard를 통해 검증 로직을 구현해 보겠습니다.
Json 포맷을 사용하여 사용자에대한 정보를 속성으로 저장하는 Claim 기반의 Web Token 입니다. 대체적으로 회원 검증 및 사용자 식별에 사용 됩니다.
구조적으로 바라봤을 때 3가지로 분류 할 수 있습니다.
Header에서는 typ와 alg 2가지 정보로 구성 됩니다.
alg는 여기서 Signature를 해싱하는 알고리즘을 지정하는 방법입니다.
{
"alg": "RS256" or "HS256",
"typ": JWT
}
{
isssuer: https://accounts.google.com
jti: Web_Client_Id...
}
{
npm i @nestjs/passport @nestjs/jwt passport-jwt @types/passport-jwt
}
일단 먼저 Jwt 발급에 필요한 패키지들을 설치해 주도록 합시다.
1. 🔰 JwtAuthGuard 만들기
- Controller에서 사용하기 위한 JwtAuthGuard 만들기

먼저 JwtAuthGuard를 만들어 줍니다. 그러면 extends한 AuthGuard에서 자동으로 Startegy를 실행해 줍니다.
2. 🔰 Jwt 검증 전략 구성하기
- 유저 검증 및 사용자 식별

AuthGuard에서 사용 될 Jwt 검증 전략을 구성 할 때 필요한 값들을 super에서 작성해주면 됩니다.
만약 본인이 Public Key로 만든다고 하면 다른 옵션들들 더 설정해줘야 하겠지요?

그러고 나서 validate 함수를 통해 payload에 담긴 sub 값으로 user를 찾는 로직을 작성합니다.
3. 🔰 auth Module 설정
- AuthModule에서 Jwt 설정

그럼 이제 auth.module에 Module들을 Import하여 값들을 설정해 줍니다.
session 사용 여부에 따라 값을 설정하고, JwtModule에서는 Jwt 검증에 사용된 Secret값을 동일하게 넣어주고, 만료기한을 설정 해야 합니다.
4. 💻 로그인 서비스 로직 구현
- 제가 저번에 포스팅 했던 글을 참고하시면 보다 더 이해하기 편하실겁니다.
해당 글을 먼저 보시고 오는 것을 추천드립니다.

그래서 로직을 보면 이제 Jwt를 발행하고, 값을 return 해주는 부분이 이제 적용 된 것입니다.
5. 📝 테스트
- 그럼 이제 로그인 하는 부분 말고 나의 정보를 얻는 API를 호출해 보겠습니다.

여기서 JwtAuthGuard를 통해 유저를 검증하고 식별한 다음 올바른 값을 return해 주는 API가 있습니다.

해당 API를 요청 할 때 Postman에서 AuthHeader에 Bearer에 발급된 Jwt 넣으니 문제 없이 잘 작동 되는군요!

이제 반대로 Token값을 보내지 않거나 잘못된 Jwt 값을 넣으면 아까 Jwt 검증 로직에서
걸려버리므로 API 요청이 안되는 것도 잘 확인했습니다.
마치며
- Jwt의 간단한 정의와 어떤 식으로 작성하고 검증하는지에 대해 한 번 알아봤습니다.
- Jwt 발행 및 검증 로직은 프로젝트 마다 전부 상이하므로, 각각 알맞게 설정하셔서 사용하면 됩니다.