목록전체 글 (90)
개발일지
이전에 구현했던 프로젝트 기준으로 설명하겠습니다.🔗 [NestJS] 회원가입 구현 #1 - Pipe 적용🔗 [NestJS] 예외 처리와 exception filter Dto 속성의 유효성 검사를 위해 <co..
지난 포스트에서 PASETO에 대해 알아봤습니다. 이를 NestJS로 직접 구현해보고자 합니다. 전반적인 구현 방식은 JWT 인증/인가와 동일합니다. 가독성을 위해 DB 저장 등의 로직은 생략하고 PASETO 생성 및 인증 부분만 설명하겠습니다.패키지 설치🔗 https://paseto.io/🔗 https://github.com/panva/paseto$ yarn add paseto v4, 비대칭키 방식(public)을 사용했습니다. PASETO 생성로그인 시 access token, refresh token을 생성합니다. 비대칭키 방식이기 때문에 한 쌍의 private/public 키 값이 필요합니다. 여기서는 paseto를 생성하는 부분이기 때문에 private key를 사용..
JWT 문제점Weak algorithmsJWT는 여러 알고리즘을 제공하는데 그 중에는 보안에 취약한 알고리즘도 포함된다.Trivial Forgery어떻게 구현하냐에 따라 위조가 쉬운 토큰을 양산할 수 있다.JWT는 토큰 헤더에 서명 알고리즘을 포함한다.공격자가 alg 헤더에 None을 지정하면 인증을 우회할 수 있다. 또는 서버가 비대칭 알고리즘을 쓴다는 것을 알면서도 대칭키 알고리즘(ex.HS256)으로 변경하여 요청할 수 있다. 예시) 서버의 RSA 공개 키는 공개적으로 알려져있다. 해커는 alg 헤더를 HS256 대칭 키 알고리즘으로 설정한 후, 공개키로 가짜 토큰을 생성한다. 서버 측에서는 alg 헤더에 명시된 대로 HS256 알고리즘과 서버의 공개키로 인증 요..
Amazon SES (Amazon Simple Email Service)Amazon SES란 아마존에서 제공하는 이메일 전송 플랫폼을 말합니다.사전 준비AWS 계정의 Access key, Secret key가 필요합니다.Amazon SES verifed email를 생성합니다. 패키지 설치aws-sdk와 nodemailer(ses transport)를 사용합니다.// 1. nodemailer$ yarn add nodemailer// 2. @aws-sdk/credential-provider-node (aws-sdk v3 사용할 경우)$ yarn add @aws-sdk/credential-provider-node// 3. @aws-sdk/client-ses$ yarn add @aws-sdk/client-se..
JWT(Json Web Token)지난 포스트에서 토큰 기반 인증 시스템에 대해 알아보았다. 이번 포스트에서는 토큰 기반 인증 시스템의 구현체인 JWT(Json Web Token)에 대해 알아보고자 한다. JWT란?JSON Web Token(JWT)은 웹 표준(RFC 7519)으로서 두 개체 간에 정보를 안전하고 간결하게 전송하기 위한 방법을 정의한다. Json 포맷을 사용하여 자가수용적(self-contained) 방식으로 사용자 정보를 저장한다. JWT는 다음과 같은 특성을 가진다.웹 표준으로서 C, Jave, Python, JavaScript 등 대부분의 주류 프로그래밍 언어에서 지원된다.자가수용적 (self-contained)이다. JWT는 토큰 정보, 전달할 정보, 검증됐..
토큰 (Token)인증을 위해 사용되는 암호화 된 문자열 토큰 기반 인증 방식사용자가 로그인을 요청하면 서버에서는 어떠한 데이터를 기반으로 인증 가능한 토큰을 생성해 클라이언트에 전달한다. 클라이언트는 요청 시 토큰과 함께 요청하고 서버는 토큰에 대한 유효성을 검사하여 사용자의 인증 여부를 판별한다.토큰 방식은 토큰의 유효성 검증과 유저의 인증을 별도로 분리할 수도 있다. 예를 들어 구글 로그인을 하면 구글 유저 인증 서버에 접근할 수 있는 토큰을 발급해준다. 이 토큰을 다시 구글 유저 인증 서버로 보내 사용자를 인증할 수 있다.jwt는 토큰 유효성을 확인하기 위한 별도의 서버를 거치지 않고도 jwt 토큰 자체를 해석하여 유저를 검증할 수 있도록 한다. 동작 방식사용자..
+) 240907 틀린 개념만 수정했습니다. 쿠키와 세션을 사용하는 이유? HTTP 프로토콜 환경은 stateless한 특성을 가지기 때문에 서버에서는 클라이언트가 누구인지 매번 확인해야한다. 예를 들어 쇼핑몰에 로그인을 했음에도 페이지를 이동할 때마다 계속 로그인을 해줘야하는 문제가 발생한다. 쿠키와 세션을 사용해 이러한 점을 보완할 수 있다. 무상태성 (Stateless)서버는 클라이언트의 이전 상태를 보존하지 않는다. 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지되지 않는다. 쿠키 (Cookie)쿠키란?서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각이다. 브라우저는 이 데이터 조각들을 저장하고 있다가, 동일한 서버에 재요청할 때 함께 전송한다.서버는 HTTP 요청..