용어 간단정리
인증 : 나는 누구인가
인가 : 나의 권한은 어디까지인가
인증(Authentication)과 인가(Authorization)란 무엇인가?
용어정리 '인증'이란? 식별가능한 정보로 서비스에 등록된 유저의 신원을 입증하는 과정입니다. 예) 출입증으로 건물에 출입 할 수 있습니다. '인가'란? 인증된 사용자에 대한 자원 접근 권한 확
wonuk.tistory.com
쿠키, 세션, 토큰
쿠키, 세션, 토큰은 인증을 유지 할 수 있는 수단입니다.
들어가기 앞서
HTTP에 대한 사전지식이 필요합니다.
HTTP는 한번 통신하고나면 연결이 끝나는 비연결을 지향합니다.
서버가 클라이언트의 상태를 보존하지 않는 특징이 있습니다.
인증의 인증수단을 이해하기 위해서는 상태없음이라는 특징을 이해해야 합니다.
서버 확장성에 용이하다
-> 똑같은 서버를 여러대 운영하여도
같은 요청에는 같은 응답을 받을 수 있게됩니다.
만약 서버가 클라이언트의 상태를 보존한다면
클라이언트의 상태를 가지고있는 서버에 보내야만
클라이언트가 기대하는 응답을 받을 수 있게됩니다.
상태를 보존하지 않는다.
예시)
사용자 취향에 맞는 술을 자동으로 추천해주는
주절주절 이라는 어플리케이션이 있습니다.
한 유저가 어플리케이션을 사용하기 위해 인증을 시도합니다.(나는 크로플이야!)
어플리케이션은 인증되었다는 의미로 오케이!!를 응답합니다.
사용자는 추천을 요청합니다.
하지만 주절주절은 사용자가 누구인지 알아보지 못합니다.
이러한 상황을 막기위해 인증을 유지시켜야 합니다.
이 인증을 유지시키기 위해 쿠키, 세션, 토큰이 사용됩니다.
쿠키
쿠키는 브라우저에 저장됩니다.
쿠키의 흐름
1. 서버에서 Set-Cookie 헤더에 key=value를 포함해 보냅니다.
2. 클라이언트는 Set-Cookie 헤더 기반으로 브라우저에 저장합니다.
3. 다음 요청부터는 Cookie 헤더에 key=value를 포함해 보냅니다.
1. 인증
2. Set-Cookie
3. 쿠키 저장
4. 쿠키와 함께 요청
쿠키의 속성
Session에서는 Persistant Cookie와 Session Cookie의 차이점을 알아야 합니다.
Persistant Cookie와 Session Cookie의 차이점
Persistant Cookie는 디스크에 저장되기 때문에
만료기간까지 영구적으로 지속됩니다.
Session Cookie는 브라우저에 제공되기 때문에
브라우저가 종료될 때 까지만 지속됩니다.
쿠키의 단점
보안에 취약합니다.
클라이언트 측에 저장되기 때문에 서버측보다
상대적으로 보안이 취약합니다.
매번 요청을 할때마다 쿠키헤더에 포함되기 때문에
탈취당할 위험이 높고
탈취가 되어서도 쿠키값을 저장할때는 key, value값을 저장하기 때문에
매우 위험합니다.
그렇다면 쿠키는 전혀 사용하지 않는것일까요?
정답은 아닙니다.
페이지를 출력할 언어선택을 기록하거나
익명사용자 장바구니를 이용하거나
팝업을 하루동안 보지 않기 버튼을 사용하는 등
보안에 이슈가 없을만한 데이터를 저장할 때 사용합니다.
Session
세션은 서버에 데이터가 저장됩니다.
세션의 흐름
1. 클라이언트가 서버에 접속 시 세션 ID를 발급받는다.
2. 클라이언트는 세션 ID를 쿠키로 저장하고 가지고 있다.
3. 클라이언트는 요청할 때 세션 ID와 함께 서버에 요청한다.
4. 서버는 세션 ID로 저장되어 있는 클라이언트 정보를 확인한다.
보통 유저가 처음 서버에 접근할 때 서버는 Session ID를 발급합니다.
그렇다면 클라이언트는 Session Cookie로 Session ID를 저장합니다.
다음 요청부터 클라이언트는 Session ID를 포함하여 요청합니다.
지금의 단계는 인증 단계입니다.
서버는 Session ID가 1인 메모리에 유저정보를 저장합니다.
클라이언트가 세션ID와 함께 요청을 보냅니다.
서버는 Session ID를 통해 저장되어있는 유저정보를 확인합니다.
요청에 응답합니다.
서버에 유저정보가 저장되기 때문에
세션은 쿠키에 비해 비교적 안전합니다.
클라이언트에 저장되는것은 유저정보가 아닌 Session ID입니다.
세션의 단점
세션을 사용하여 HTTP의 상태없음 이라는 특징이 사라집니다.
즉, 서버를 확장하는 데에 부담이 됩니다.
이를 보완하기 위해 세션서버나, Sticky Session Session Clustering 등
대안이 있습니다.
추천링크
Sticky Session, Session Clustering, Session Storage
다중 서버 환경에서 세션을 어떻게 관리할 것인가? 진행중인 프로젝트 https://github.com/Hwangwonuk/cucumber-market GitHub - Hwangwonuk/cucumber-market: 중고물품 거래사이트 오이마켓 토이프로젝트..
wonuk.tistory.com
멀티 디바이스 환경에서 신경써야 할 부분이 있습니다.
유저 정보를 서버 메모리에 가지고 있게됩니다. -> 가장 큰 단점
트래픽이 큰 서비스라면 서버메모리에 부담이 생깁니다.
이를 보완하기 위해 토큰이 등장합니다.
토큰
토큰은 브라우저에 저장됩니다.
쿠키와 다른점은 key, value를 저장하는것이 아니라
유저를 식별할 수 있는 토큰을 저장합니다.
토큰의 흐름
1. 클라이언트는 로그인을 합니다.
2. 정보가 맞다면 서버는 클라이언트에게 토큰을 제공합니다.
3. 다음 요청부터는 Authorization 헤더에 토큰을 포함해 요청합니다.
서버에서 발급해준 토큰이 맞다면 유저를 식별할 수 있는 데이터를
Token에서 가져와 유저를 확인할 수 있습니다.
세션과 비교해보는 토큰의 장점
1. 서버의 메모리에 부담이 적습니다.
서버는 토큰의 유효성만 확인하면 됩니다.
유저의 정보를 서버에 저장하는 세션에 비해
서버 메모리 부담이 적어지게 됩니다.
2. 서버를 확장하는 데에 부담이 적습니다.
서버에 상태가 없기때문에 서버를 확장하는것에 부담이 적습니다.
3. 멀티 디바이스 환경에서 사용하기 편합니다.
세션과 비교해보는 토큰의 단점
1. 강제로 만료시킬 수 없다.
토큰이 탈취되었을 때 서버는 토큰을 강제로 만료해야 합니다.
하지만, 토큰을 관리하는측은 클라이언트 이기때문에
서버측에서는 토큰을 강제로 만료할 수 없게됩니다.
즉, 서버측에서 강제로 로그아웃을 진행시키기 힘듭니다.
토큰의 접근을 막기위해 BLACKLIST를 작성한다면 강제로 만료가되지만
이렇게되면 서버에 BLACKLIST 데이터를 저장하는 상태가 됩니다.
즉, 서버에 데이터가 축적됩니다.
이러한 문제점을 막기위해 대부분 토큰은 유효기간을 짧게 설정합니다.
정리
출처
테코톡 - 나봄의 인증과 인가
https://www.youtube.com/watch?v=TXWUNePimAc
'프로그래밍 공부 > 컴퓨터공학 기초' 카테고리의 다른 글
웹 보안(SQL Injection, XSS) (0) | 2022.12.27 |
---|---|
Web Socket이란? (0) | 2022.01.25 |
인증(Authentication)과 인가(Authorization)란 무엇인가? (0) | 2022.01.17 |
TCP/IP, 3, 4Way HandShaking (0) | 2022.01.06 |
Process와 Thread (0) | 2022.01.05 |