비상태성(Stateless)
HTTP의 비상태성(Stateless) 특성 때문에, 서버는 클라이언트의 상태를 저장하지 않으며, 따라서 이전 요청과 다음 요청의 맥락이 이어지지 않음
그렇다고 매번 로그인 요청을 할 수도 없는 노릇....
이런 HTTP 환경에서 어떻게 서버는 사용자를 인가할까? 웹 애플리케이션에서는 이 문제를 세션
또는 토큰
을 사용하여 문제를 해결함.
인증(Authorization)/ 인가(Authentication)
인증
: 쉽게 말해 로그인임. 클라이언트가 자기자신이라고 주장하고 있는 사용자가 맞는지를 검증하는 과정
인가
: 유저의 요청에 대한 권한을 확인하고 허가 해주는 것
세션(Session) 방식
세션이란?
세션(Session)
'장치 간의 정보 교환'을 의미
서버에 '로그인이 되어이슴'이 지속 되는 상태도 '세션' 이라고 함
방식
세션 기반 인증을 위해 Session과 Cookie가 사용됨
- 유저가 로그인을 하면 서버 메모리 상에 세션이 저장됨 (세션을 구분하기 위해 Session Id를 기준으로 정보를 저장함)
- 클라이언트의 브라우저에 쿠키로 Session Id가 저장됨
- 쿠키에 정보가 담겨있기 때문에 브라우저는 해당 사이트에 대한 모든 Request에 Session Id를 쿠키에 담아 전송함
- 서버는 클라이언트가 보낸 Sesion Id와 서버 메모를 관리하고 있는 Session Id를 비교해 일치하면 인가를 수행해줌
장점
단점
- 서버에서 클라이언트의 상태를 모두 유지해야 하므로 DB 과부하가 심함
- 멀티 디바이스 환경에서 로그인 시 중복 로그인 처리가 되지 않는 등 신경 써야 할 일이 많음
- 로드 밸런싱을 하는 경우 세션의 관리가 힘들어짐
세션 방식에 대해서 설명해보세요.
토큰(Token) 방식
토큰 기반 인증의 방법으로 많은 웹 서버들은 JWT(Json Web Token)을 사용함
방식
- 유저가 로그인을 요청하고 id,pw 정보가 유효하면 서버에서 Secret Key를 사용해서 유저에거 토큰을 발급함
- 클라이언트는 발급 받은 토큰을 저장하고, 서버에서 요청 할 때 마다, 토큰을 함께 서버에 전달함
- 서버는 토큰을 검증하고, 요청에 응답함
토큰 생김새
aaaaaa.bbbbbb.ccccc
헤더
내용(payload)
서명
payload
: 토큰에 담긴 사용자 정보 등의 데이터가 저장되어있음
장점
- 클라이언트에 토큰이 저장되어 있기 때문에 서버 부담이 줄어듦
- 멀티 디바이스 환경에 대한 부당이 없음 (확장성이 좋다)
단점
- payload는가 별도로 암호화 되어 있지 않아 누구나 내용을 볼 수 있어서 민감한 데이터를 실을 수 없음
(payload에 실을 수 있는 데이터가 제한됨)
- 클라이언트가 모든 인증정보를 가지고 있어 토큰 만료 전까지는 보안에 취약함
토큰 방식에 대해 설명해보세요.
세션 방식과 토큰 방식의 차이점에 대해서 설명해보세요.
세션 방식의 경우 서버에 클라이언트 상태를 유지하지만 토큰 방식은 클라이언트에 토큰이 저장되어 있음
그래서 세션 방식은 보안에는 강하지만 DB과부하가 올 수 있고, 반대로 토큰 방식은 서버 부담이 줄어들지만, 토큰이 한번 탈취 당하면 토큰 만료 전까지 보안에는 조금 취약하다. 하지만 그럼에도 토큰이 확장성이 뛰어나 멀티 디바이스 환경에 대한 부담이 없어서 토큰 방식을 많이 사용한다.