목록분류 전체보기 (92)
개발일지
OAuth(Open Authorization)란?"자신이 소유한 리소스에 다른 소프트웨어 애플리케이션이 접근할 수 있도록 허용해 줌으로써 접근 권한을 위임해주는 개방형 표준 프로토콜" . 우리가 흔히 사용하는 구글, 카카오 간편 로그인 기능도 OAuth2.0 프로토콜을 기반으로 한다. 탄생 배경OAuth 이전에도 사용자의 아이디와 패스워드가 노출되지 않도록 하면서 API 접근 위임이 가능한 인증 방법이 존재했다. 구글과 야후, 아마존 등에서 각각의 인증 방식을 제작하여 사용했다. 그러던 도중 트위터 개발자와 Gnolia의 개발자가 만나 표준안에 대한 논의를 거쳤고 마침내 OAuth 등장, 2010년에는 OAuth 1.0 표준안인 (RFC5849) 가 발표되었다. 현재에는 OAuth2.0가..
AWS S3에 파일 업로드 하기 패키지 설치aws-sdk를 사용합니다.$ yarn add aws-sdk --save구현Controller, ServiceFileInterceptor 인터셉터와 UploadedFile 데코레이터로 form으로부터 받은 파일을 추출해낼 수 있습니다. @Patch('profile') @UseInterceptors(FileInterceptor('profileImg')) async updateProfile(@UploadedFile() profileImg) { const userId = 1; return await this.usersService.updateProfile(userId, profileImg); } 추출된 파일은 ..
이전에 구현했던 프로젝트 기준으로 설명하겠습니다.🔗 [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는 토큰 정보, 전달할 정보, 검증됐..