찔끔찔끔씩😎

[Sopt] 5차 세미나(1) - Middleware, Authentication, API 명세서 본문

Server/Nodejs

[Sopt] 5차 세미나(1) - Middleware, Authentication, API 명세서

댕경 2022. 5. 18. 17:20
728x90


Middleware

🔎 Middleware란?

요청과 응답의 중간(middle, 미들)을 말한다.

따라서 미들웨어는 요청과 응답을 조작하여 기능을 추가하기도 하고, 나쁜 요청은 걸러내는 기능을 한다.


Authentication

요청을 보내는 주체가 누군줄 알고 API 요청을 막 허용해도 되는걸까? (당연 아님)

🔎 Stateless Protocol란?

무상태 프로토콜

- 모든 요청이 상호 독립적이며 서버가 request, response 간에 어떠한 데이터도 보존하지 않는다.

- 중간에 요청이 다른 서버로 들어가도 전혀 문제가 없다.

- 즉 로그인을 했더라도 그 다음 요청과 독립적이라는 것!

🔎 Authentication란?

Authentication 인증 은 사용자가 자신이 주장하는 바로 사용자가 맞는지 확인하는 절차이다.

ex) 아이디에 맞는 비밀번호로 로그인하는 것

🔎 Authorization란?

Authorization 인가 는 사용자가 특정 자원에 대해 접근 권한이 있는지 확인하는 절차이다.

ex) 로그인 후에 개인정보 등 로그인 해야만 열람이 가능한 정보들이 있는 것 

🔎 인증 방법 (Cookie vs Session)?

Cookie

쿠키란 클라이언트 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일을 말한다.

key-value 쌍으로 email=sopt@gmail.com 처럼!

이는 일정 시간동안만 저장되며 요청과 응답의 header에 저장된다.

서버로부터 쿠키가 오면 웹 브라우저는 쿠키를 저장해두었다가 요청 시에 브라우저가 자동으로 쿠키를 같이 보낸다. 모바일 앱에서는 거의 사용 불가능! 

 

Session

세션이란 일정 시간동안 같은 브라우저로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지하는 기술이다.웹 브라우저를 통해 웹 서버에 접속한 이후로 브라우저를 종료할 때까지 유지된다.클라이언트는 발급받은 세션 ID를 서버 메모리에 저장한다. 그래서 서버가 재시작되면 세션 데이터는 사라진다.넷플릭스나 인스타그램처럼 하나의 사용자가 여러 로그인 정보를 가지는 경우에 유용하다.이처럼 세션은 서버의 자원을 사용하기 때문에, 무분별하게 만들다보면 서버의 메모리가 감당할 수 없어질 수도 있고, 이에 속도가 느려진다.

🔎 토큰 Token

보안성: 정보가 담긴 데이터(JSON객체)를 암호화

Self-Contained: JWT(Json Web Token) 자체적으로 모든 정보를 포함한다. 

확장성: session DB와 같은 인증 저장소가 따로 필요하지 않다.

 

 

Json Web Token

두 개체 사이에서 JSON 객체를 사용하여 정보를 안전하게 전달

  • Header : JWT 토큰 유형 해시 알고리즘
  • Payload : 클라이언트 정보
  • Signature : 서명 정보

일반적으로 Token 은 Header  Authorization 필드에 담긴다.

Authorization: <type><credentials>

 

이때 타입의 예로는

  • Basic : 사용자 아이디와 암호를 Base64로 인코딩한 값을 토큰으로 사용
  • Bearer : JWT 혹은 OAuth 인증
  • Digest : 서버에서 난수 데이터 문자열을 클라이언트에 보낸다. 클라이언트는 사용자 정보와 nonce를 포함하는 해시값을 사용하여 응답
  • HOBA : 전자 서명

API 명세서

API 명세서는 누가 봐도 이해할 수 있도록 명확하고 직관적이어야 한다.내부적으로 어떻게 구현되어 있는지 몰라도 사용 가능할 정도로..

🔎 API 명세서란?

클라이언트에게 API 명세서를 제공해야 우리가 만든 서버 API를 사용 가능하다.

명세서를 작성할 수 있는 도구로는 swagger, postman, notion, github wiki 등등이 있다.

 

구성요소

  • API 이름 ex) 영화 정보 조회
  • HTTP Method ex) GET
  • Content-Type ex) application/json
  • Request Header, Body, Params, Query
  • Response Body (Success, Fail)
Comments