쿠키 인증 방식
정의
쿠키에 포함된 정보는 클라이언트 측 서버에 보관되지만 안전하지 않습니다.
쿠키는 클라이언트 컴퓨터에 저장되는 텍스트 파일로, 사용 추적 목적으로 보관됩니다. 서버 스크립트는 쿠키 세트를 브라우저로 전송합니다. 예를 들어 이름, 나이 또는 식별 번호 등이 있습니다. 브라우저는 이 정보를 나중에 사용할 수 있도록 로컬 컴퓨터에 저장합니다. 다음에 브라우저가 웹 서버에 요청을 보낼 때 해당 쿠키 정보를 서버로 전송하고 서버는 해당 정보를 사용하여 사용자를 식별합니다.
보통 로그인 시 set cookie 라는 function을 이용해서 클라이언트의 브라우저에 cookie를 저장하고 HTTP 헤더에 쿠키 값을 넣어 서버에 HTTP 요청을 하게 된다.
장단점
- 장점 :
- 장바구니 OR 자동 로그인 같은 편의성 기능을 사용 가능하다.
- 단점 :
- 쿠키에 많은 정보가 실려 있다면 요청마다 큰 오버헤드를 갖게 되어 성능 문제로 발생 가능
- 클라이언트 쪽에 저장되어 만료시각을 명시하게 되면 파일로 저장되어 브라우저가 종료 되어도 휘발되지 않아 탈취 가능성이 있다.
보통 쿠키는 세션과 같이 사용하고, 세션 ID 값과 함께 쿠키를 발급해 중요한 정보에 접근 시 사용자는 쿠키를 사용하고 서버에서 쿠키를 받아 세션의 정보를 전달해주는 방식으로 사용 됨.
세션 인증 방식
정의
세션은 Session ID, 로그인 시간, 만료 시간 등 사용자에 대한 정보를 저장하는 작은 파일(대부분 JSON)이다. 이 파일은 서버가 사용자 요청을 추적할 수 있도록 서버에서 생성되어 저장된다. 사용자는 발급된 Session ID를 HTTP 헤더와 함께 서버로 전송하고 서버는 요청을 받아서 Session ID에 해당하는 세션 정보가 세션 저장소에 존재한다면 해당 사용자를 인증된 사용자로 판단한다.
장단점
- 장점 :
- 세션은 서버에 저장되므로 관리자가 세션에 대한 권한을 갖는다.
- 계정이 유출 되었을 때 서버에서 세션 ID를 무효화하면 즉시 로그아웃 된다.
- 단점 :
- 세션은 서버에 저장되어서 사용자가 전송하는 세션 ID를 조회하는 것은 서버가 담당한다. 이로 인해 확장성 문제가 발생할 수 있다.
- 쿠키를 사용하기 때문에 cross-site 요청 위조 공격에 노출 될 수 있다.
- 공격자는 쿠키를 악용해 서버에 악성 요청을 전송할 수 있다.
- 공격자가 세션 ID를 가로채 서버에 유해한 요청을 수행할 수 있다.
토큰 인증 방식
정의
토큰은 클라이언트가 서버에 직접 접속을 하게되면 서버에서 해당 클라이언트에 인증을 한다는 의미로 토큰을 제공한다. 토큰을 받은 클라이언트는 HTTP 헤더에 토큰을 심어서 Req 를 보낸다. 서버에서는 받은 토큰을 서버에 갖고 있는 토큰과 비교해 인증을 처리하게 된다.
세션은 서버나 DB에 세션정보라는 것을 저장하고 조회를 직접해야 하기 때문에 오버헤드 발생 가능성이 있다. 토큰은 클라이언트 쪽에 위치하기 때문에 이러한 문제점이 없으며, 토큰 내부의 데이터를 비교하여 서버 측에서 위조 여부만 판별 해주면 된다.
대표적으로 JWT를 많이 사용하는데 JWT는 디지털 서명이 존재해 토큰의 내용이 위변조 되었는 지 서버측에서 확인할 수 있다.
보통 HTTP의 Authorization 헤더를 이용해서 Bearer 문자열과 함께 base64로 인코딩 된 문자를 같이 보내게 끔 되어 있다.
Token의 보안 상의 단점을 극복하기 위해 JWT에서는 Access Token 과 Refresh Token이라는 개념을 도입했다.
Refresh Token은 Access Token 과 동일한 형태의 JWT이며, Refresh Token은 긴 유효기간을 갖고 Access Token이 만료 됐을 때 새로 발급해주는 일종의 재발급 티켓이 된다.
Access Token 만을 이용한 인증 방식은 제 3자에게 탈취 당했을 때 보안에 취약하기 때문에, 서버에 Refresh Token 을 저장해 Refresh Token이 해커에게 탈취 당했다고 판단이 되면 Refresh Token을 삭제해 강제로 로그아웃 시켜 보안을 강화할 수 있다.
보통 Access Token 은 인증기간을 짧게 가져가고 Refresh Token은 Access Token 보다 훨씬 길게 가져간다.
장단점
- 장점
- 클라이언트 쪽에서 토큰을 갖고 있기 때문에 서버에 부하가 없음.
- 토큰을 사용해 다른 서비스에서도 권한 공유를 할 수 있다. (OAuth)
- 단점
- 쿠키/세션과 다르게 토큰 자체 데이터가 많다. 인증 요청이 많을 수록 네트워크 부하가 커진다.
- Payload 자체는 암호화되지 않기 때문에 유저의 중요 정보는 담을 수 없다.
- 토큰을 탈취 당하면 대처하기 어렵다. (따라서 사용 기간 제한을 설정하는 식으로 극복한다.)
[참조] : https://hackernoon.com/using-session-cookies-vs-jwt-for-authentication-sd2v3vci
https://www.geeksforgeeks.org/session-vs-token-based-authentication/
'CS 지식' 카테고리의 다른 글
메시지 큐란? (0) | 2023.07.05 |
---|---|
모듈, 패키지, 라이브러리, 프레임워크란? (0) | 2023.07.05 |
GB, GiB ( 기비바이트 ) 란? (0) | 2023.06.26 |
PDU(Protocol Data Unit)란? (0) | 2023.06.26 |
Heap과 Stack이란 (0) | 2023.06.26 |