인증은 대부분의 애플리케이션에서 필수적인 부분입니다. 인증을 다루는 방식과 전략은 다양합니다.
이 예제에서는 Json Web Token을 이용한 토큰 기반 인증을 사용할 것 입니다.
Authentication(인증)은 사용자의 신원을 증명 하는 프로세스입니다. 이 예제에서는 ID/PW로 서비스의 사용자를 증명하고, 서버에서 받은 JSON Web Token을 가지고 필요한 리소스에 접근하여 인증을 합니다.
Authorization(인가 또는 권한 부여)란 인증된 주체에게 작업을 수행할 수 있는 사용 권한을 부여하는 작업입니다. 액세스가 허용된 데이터 및 해당 데이터로 할 수 있는 작업을 지정합니다.
사용자를 추방하거나, 특정 데이터(게시글)에 대한 CRUD 권한을 부여 및 지정하는 작업입니다.
NestJS의 Guard는 run-time 중에 주어진 요청을 특정 조건(허가, 역할, ACLs 등)에 따라 route handler
가 허가할지 안할지를 결정합니다.
일반적인 Express Application에서 인증은 미들웨어에서 처리되었습니다. 미들웨어는 토큰 유효성 검사 및 request
객체에 속성을 붙이는 것 등이 특정 route context(그리고 그것의 metadata)와 강하게 연결되지 않기 때문에, 미들웨어는 인증에서 괜찮은 선택입니다.
하지만 미들웨어는 next()
함수가 불린 후 어떤 handler가 실행되었는지 모릅니다. 하지만 Guard
는 ExecutionContext
instance로 접근하여 다음에 실행될 것이 무엇인지 정확히 알고있습니다. 이는 코드를 DRY원칙과 선언적으로 만드는데 도움을 줍니다.
이 예제에서 ExecutionContext
를 다룰때 다시 한번 언급하겠습니다.
Reference