[Spring] 인증과 인가 & 쿠키와 세션

이병수·2024년 1월 26일
0

스프링 정리

목록 보기
16/24
post-custom-banner

Spring Security를 들어가기 전


인증과 인가

인증이란 (Authentication)

  • 증명하는 것, 인증하는 것, 신원을 검증하는 것 등

  • 해당 유저가 실제 유저인지 인증하는 것

  • 통상 회원가입하는 것이나, 로그인 하는 것과 같이 해당 유저가 맞는지를 확인하는 절차를 의미한다.


인가란 (Authorization)

  • 허락 받는 것, 권한을 부여하는 것, 리소스에 접근이 가능한지 허가받는 것 등

  • 특정 웹 페이지에 들어갈 수 있는지 권한을 부여하거나, 개별 사용자들에게 해당 애플리케이션에 엑세스 할 수 있는 권한을 부여하는 것을 의미한다.

간단하게, 인증과 인가에 대해서 인증은 로그인을 할 때, 회원과 비회원의 여부에 따라 다른 권한을 부여하는 것을 인가라고 한다.



웹 애플리케이션 인증

  • 일반적으로 서버-클라이언트 구조로 되어 있으며 Http 프로토콜을 이용하여 통신을 하는데, 이 통신은 비연결성(Connectionless)무상태(Stateless) 이다.

  • 해당 내용은 [HTTP] HTTP 에서 다루었다.

  • 따라서 일반적으로 웹 애플리케이션은 두가지 방법을 통해서 인증을 처리한다.

    • 쿠키-세션 인증 방법

    • JWT 인증 방법

Spring Security는 세션-쿠키 방식으로 인증을 처리한다.



쿠키와 세션 방식 인증

'특정 유저가 로그인 되었다' 라는 상태를 저장하는 방식이다.
인증과 관련된 아주 약간의 정보만 서버가 가지고 인증과 관련된 최소한의 정보는 저장해서 로그인을 유지시킨다는 개념

  1. 사용자가 로그인 요청을 서버에게 보낸다.

  2. 서버는 회원 DB의 유저 테이블을 통해 아이디와 비밀번호를 비교, 대조를 통해 사용자를 확인하고 정보를 서버에 보낸다.

  3. 실제 유저테이블에 있는 존재라고 판단하면 인증을 통과한 것으로 판단 후, 세선 저장소에 해당 유저가 로그인 되었다 라는 정보를 넣는다.

  4. 세션 저장소에서 Session ID를 만들어서 서버에게 보낸다. (Session ID는 난수)

  5. 서버는 사용자에게 로그인 요청에 대한 응답의 결과로 Session ID 값을 준다.

  6. 클라이언트는 Session ID 값을 쿠키 저장소 에 보관 후, 서버에 요청을 할 때마다 해당 Session ID 값을 함께 보낸다. ( 주로 Http header에 담아서 보낸다. )

  7. 클라이언트의 요청에서 쿠키를 발견한다면, 서버는 세션 저장소에 해당 쿠키를 검증한다.

  8. 유저정보를 받아왔다면 해당 사용자는 로그인 되어있다는 사용자로 판단한다고 서버에게 데이터를 보낸다.

  9. 로그인 된 유저에게 요청에 대한 응답을 내어준다.



쿠키와 세션 코드로 알아보기


JWT 기반 인증

JWT(JSON Web Token)란, 인증에 필요한 정보들을 암호화 시킨 토큰을 의미한다.
JWT 기반 인증은 쿠키/세션 방식과 유사하게 JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별하게 한다.

  1. 사용자가 서버에게 로그인 요청을 보낸다.

  2. 서버는 회원 DB의 유저 테이블을 통해 아이디와 비밀번호를 비교, 대조를 통해 사용자를 확인하고 정보를 서버에 보낸다.

  3. 실제 유저테이블에 있는 존재라고 판단하면 인증을 통과한 것으로 판단 후, 유저의 정보를 JWT로 암호화해서 내보낸다.

  4. 서버는 로그인의 요청의 응답으로 jwt 토큰을 사용자에게 준다.

  5. 클라이언트는 그 토큰을 저장소에 보관하고 앞으로 요청마다 토큰을 같이 보낸다.

  6. 클라이언트의 요청에 토큰을 발견했다면 서버는 해당 토큰을 검증한다.

  7. 토큰에 검증된 유저라면 로그인 된 유저로 판단하고, 요청에 대한 응답을 내어주게 된다.


쿠키와 세션이란?

일단 쿠키와 세션 모두 HTTP 에서 상태 정보를 유지(Stateful) 하기 위해서 사용한다.


쿠키(Cookie)

  • 클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일

  • 웹 브라우저는 수신한 쿠키를 미리 정해진 기간 동안 또는 웹 사이트에서 사용한 세션 기간 동안 저장한다.

  • Google Chorme에서는 이 쿠키들을 "Cookies" 라는 파일에 저장한다.

  • 쿠키는 웹 사이트 활동을 특정 사용자와 연결하는데 도움을 줄 수 있으며, "기억" 하는 것에 도움을 줄 수 있다.

  • 또한 일부 쿠키에는 사용자가 방문한 웹 사이트가 기록된다.

  • 쿠키에 조금 더 된 내용은 [HTTP] 헤더 (2) 여기에 조금 정리해놓았다.


세션(Session)

  • 서버에서 일정 시간 동안 클라이언트 상태를 유지하기 위해 사용한다.

  • 서버에서 클라이언트 별로 유일무이한 세션ID 를 부여한 후 클라이언트 별 필요한 정보를 서버에 저장한다.

  • 서버에서 생성한 세션ID는 클라이언트의 쿠키값으로 저장되어 클라이언트 식별에 사용된다.


쿠키와 세션 비교

빈칸용으로쓰임쿠키(Cookie)세션(Session)
설명클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일서버에서 일정한 시간동안 클라이언트 상태를 유지하기 위해서 사용
저장위치클라이언트웹 서버
사용 예사이트 팝업의 "오늘 다시보지 않기" 정보 저장로그인 정보 저장
만료 시점쿠키 저장 시 만료일시 설정 가능브라우저 종료 시 or 클라이언트 로그아웃 시 or 서버에 설정한 유지기간까지 해당 클라이언트의 재요청이 없을 경우
보안취약비교적 안전
profile
백엔드 개발자가 되고 싶어요
post-custom-banner

0개의 댓글