웹 인증&인가

seyong·2021년 12월 5일
0
post-thumbnail

웹 개발자라면 반드시 이해하고 있어야 할 기본지식중 하나인 인증& 인가 !! 인증과 인가 절차 및 인증의 필수 요소인 패스워드 암호화, 그리고 인가의 필수요소인 JWT에 대해 알아보자!!
추후에 인증은 웹사이트에서 회원가입시 입력한 패스워드를 bcrypt 로 암호화해주는 역할이 될것이고, 인가는 jwt 라이브러리를 이용하여 로그인시 jwt토큰을 발행하여 페이지마다 번번히 로그인해줄필요가 없게끔 사용자를 인증해주는 역할을 해줄 것 이다.

  • 인증과 인가는 API에서 가장 자주 구현되는 기능 가운데 하나이다.
  • Private한 API는 물론이고 Public한 API도 기본적인 인증과 인가를 요구한다.

인증(Authentication)

  • 웹에 접속할여는 유저가 누구인지 확인하는 절차

  • 클라이언트가 자신이 주장하는 사용자와 같은 사용자인지 확인하는 과정

  • 가장 대표적인 예로는 유저가 로그인을 시도 할때, 우리 DB에 있는 유저의 정보와 일치하느냐 확인하는것이 있다.

  • 인증이 필요한 이유 : 서비스를 누가 사용하며, 추적이 가능하도록 하기 위함, 타인에게 사용자의 정보를 보호하기 위함

  • 인증에 필요한 것은 아이디, 이메일주소, 비밀번호 등이있다.

  • 이중에서 가장 중요한 것은 바로 비밀번호 이다.


인가(Authorization)

  • 사용자가 서버에 로그인 하면 해당 사용자가 맞는지 확인하는 과정이 바로 인가이다.

  • 유저가 요청하는 request를 실행할 수 있는 권한이있는 유저인가를 확인하는 절차이다.

  • 예를 들어, 해당 유저는 고객 정보를 볼 수는 있지만, 수정 할 수는 없다 등..

  • 확인 후 유저에 대한 권한을 허락하기도 하고 권한을 부여하기도 한다.

  • 특정 자원에 대한 접근 권한이 있는 확인하는 절차이다.

정리 🗂

  • 유저의 궁극적인 목표는 Resource에 접근하는 것이다.

  • 웹 에서의 Resource에는 웹 페이지, 텍스트 , 이미지, 특정 html element 등등 의미가 다양하다.

  • Resource 에는 접근하기위해서는 인증과 권한(인가)이 필요하다.

  • 비유해보자면, 예를 들어 인증(Authentication)은 주민등록증을 만17세가 되면 발급받는것이라 한다면,

  • 인가(Authorization)는 성인이되서 발급받은 주민등록증으로 편의점에서 담배를 사거나 술집에가서 술을 마실수 있는 것

  • 여기서 담배 , 술 은 Resource 라고 생각해볼수도있겠다.... (지극히 주관적인 생각이고 비유이다..)

웹 에서의 인증

  • 웹에서 인증을 요청하는 유저는 서버에게 두가지 정보를 제시한다.

  • 나는 '누구'인가 ▶ ID(아이디)

  • 내가 그 유저인 증거 ▶ password(비밀번호)

HTTP 요청 방식

  • 요청 방식은 웹 클라이언트(브라우저)가 웹 서버에 요청하는 서비스 처리 방식을 지정하는 것으로 일반적으로 GET, POST가 많이 사용되며, 이 외에도 PUT, DELETE, HEAD 등이 있다.

  • 웹 / 모바일에서 가장 많이 사용되는 통신 방식이다.

  • 서버에 유저에 정보를 보내서 사용허가를 받는것

요청 방식----------------------설명
GET서버에서 자원을 가져올 때 가장 단순한 요청 방식으로 서버에 빠른속도로 요청할 때 사용한다. 주로 서버로 부터 정보를 조회하기 위해 설계된 메소드이다. URL에 데이터를 포함시켜 요청하는것으로 인해 보안에 취약하다는 단점이있다. 또 전송하는 길이에 제한이있다. 캐싱을 할 수 있다.
POST서버에 자원을 새로 등록할 때데이터를 생성 / 수정하기 위해 설계된 메소드이다. URL에 데이터를 노출하지 않고 요청 데이터를 Body에 포함 전송하는 길이에 제한이 없다. 캐싱을 할 수 없다.
PUT서버의 자원을 요청에 들어 있는 자원으로 치환하고자 할 때 파일을 업로드 할 때 사용한다.
PATCH서버 자원의 일부만 수정하고자 할 때 사용
DELETE서버의 데이터를 삭제하는 작업을 요청할 때 사용
HEADGET방식과 같으나 요청 정보의 몸체 없이 헤더 정보만 요청하는 방식
OPTION요청 URL에 대하여 허용되는 통신 옵션을 알고자 할 때 사용하는 방식
TRACE웹 클라이언트의 요청을 그대로 반환하는 방식이다. 요청 정보가 웹 서버에 도달하기까지의 경로를 기록한다.

HTTP 요청 방식의 문제점

  • Http 특징 : Reuest(요청), Response(응답) 방식

  • 통신을 서로 주고받아도 클라이언트와 서버가 서로 연결되어 있는 것은 아니라서 각각의 통신은 독립적이라는 것

  • 한번 요청과 응답이 완료되면 저장되지 않는 stateless 성질이 있다.

  • 한번 요청과 응답이 끝나면 상태 정보를 유지하지 않는다. 그렇기 때문에 다른 페이지로 넘어가면 정보가 없으므로 인증 절차가 필요한 것이다.

HTTP 요청 인증방식

  • 인증방식은 주로 쿠키, 세션, 토큰인증기반이다.

쿠키(Cookie)

  • 쿠키는 클라이언트(유저의 컴퓨터)에 저장되는 텍스트 형식의 데이터

  • 쿠키는 방문한 웹사이트에서 생성된 파일로, 인터넷 사용정보를 저장한다.

  • 쿠키에는 사용자 인증이 유효한 시간을 명시할 수 있으며, 한 번 유효 시간이 정해지면 브라우저를 끄더라도 인증이 유지된다는 점이 특징이다.

  • 예시) 방문 사이트에서 로그인 시, "아이디와 비밀번호를 저장하시겠습니까?" 라고 나오는 메세지

  • 예시) 쇼핑몰사이트에서 장바구니 기능 등등...

세션(Session)

  • 세션은 쿠키를 기반으로 한다.

  • 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리한다.

  • 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지한다.

  • 사용자에 대한 정보를 서버에 저장하기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 됨. 그래서 동접자 수가 많은 웹 사이트인 경우 서버에 과부하를 주게 되므로 성능 저하의 요인이된다.

쿠키 vs 세션 (두개의 차이점)

  • 가장 큰 차이점은 사용자의 기록 정보가 저장되는 위치이다.

  • 쿠키는 서버의 자원을 전혀 사용하지 않으며, 세션은 서버의 자원을 사용한다.

  • 세션은 사용자의 수 만큼 서버 메모리를 차지하기 때문에 요즘은 이런 문제들을 보완한 토큰 기반의 인증방식을 사용하는 추세이다. jwt token

JWT - JSON Web Token

  • JSON 데이터 구조로 표현한 토큰이다.

  • 서버에 정보를 보내고 그 결과를 JSON 형태 토큰으로 받는것이다.

  • 이렇게 받은 토큰은 로그인을 하고나서 메인홈페이지로 가거나 장바구니 화면, 메뉴를 눌러서 방문 사이트내에서 다른 페이지로 넘어가도 로그인이 풀리지않게 계속해서 인가를 해주는 역할을 한다고 볼 수 있다.

  • 아래 사진을 보면 JWT 토큰의 형태를 알 수 있다.

  • 아래 사진은 jwt 토큰이 발급되는 전체적인 흐름이다.

profile
# 불편함을 편리함으로 바꾸고싶은 주니어 Back-end 개발자

0개의 댓글