Server

[Server] 사용자 인증 방식 종류 / 쿠키,세션,토큰 방식 / 각 특징과 차이점 (feat. JWT토큰)

Hannana. 2024. 2. 8. 21:56
반응형

우리는 보통 서비스에 접근할 때, 사용자 인증을 거친다.

사전에 허가받은 사용자일 수도 있고, 허가받지 않은 사용자일 수도 있다.

시스템의 보안을 위해 접근하는 이가 누군지, 확인하고 인증을 하는 과정을 거치는 것은 필수적이다.

클라이언트 인증을 위한 방식은 여러가지가 있다.

 

 

 

 

 

1. 사용자 인증 방식의 종류와 특징

 

 

  • 쿠키(Cookie)
-클라이언트의 웹 브라우저에 저장되는 작은 데이터 조각
-서버가 클라이언트에게 쿠키를 발급하면, 클라이언트는 이를 저장
-나중에 해당 서버에 요청을 보낼 때마다 쿠키를 함께 전송한다.

 

≫ 주로 세션 식별자 또는 사용자 설정과 같은 클라이언트 정보를 저장하는 데 사용한다.

웹 사이트에서 로그인하면 클라이언트에게 쿠키가 발급되어 로그인 세션을 유지하는 것을 예로 들 수 있음.
반면에 쿠키를 제대로 구현하지 않으면 취약점이 발생할 수 있다는 걸 유의하자.

 

 

 

 

 

  • 세션(Session)
-서버 측에 사용자 정보를 저장하는 방식
-클라이언트가 서버에 최초 요청 -> 서버는 클라이언트를 식별하는 고유한 세션 ID를 생성 -> 클라이언트에 쿠키로 전송
-사용자가 로그인하면 서버는 해당 사용자의 세션 ID를 생성하고 이를 세션 스토어에 저장한다.

 

≫ 일반적으로 세션은 서버 측에 저장되기 때문에 쿠키보다는 안전함

 

 

 

 

  • 토큰(Token)
-클라이언트에게 발급되는 문자열
-토큰 내부에 클레임(claim)이 포함되어 있어 사용자 정보를 저장함
-사용자 로그인 -> 서버가 클라이언트에게 JWT 토큰(사용자의 인증 정보 포함)을 발급
-클라이언트의 상태를 서버에 저장할 필요가 없음

 

클라이언트의 상태를 일일히 서버에 저장하지 않아도 되기 때문에 서버의 확장성이 향상된다.

서버가 저장하는 대신에 클라이언트가 이 자격증명 토큰을 저장하고,

필요할 때마다 서버에 전달하여 증명을 제공하는 형태이다.

단, 사용자가 토큰을 분실하거나 탈취당하면 보안 문제가 발생할 수 있음

 

 

 

 

 

 

 

 

 

 

 

2. (번외) JWT 토큰이란?

 

: JWT는 "JSON Web Token"의 약자로, 웹에서 정보를 안전하게 전송하기 위한 토큰 기반의 인증 방식이다.

JSON 형식의 데이터로 구성되어 있으며 세 가지 더미로 나눌 수 있다.

 

-Header (헤더) : 토큰의 유형 및 해시 알고리즘에 대한 정보를 포함

-Payload (내용) :  사용자에 대한 정보나 기타 메타데이터를 포함하는 클레임을 담음

-Signature (서명) : 위의 헤더와 내용 부분을 인코딩한 후, 서버가 비밀 키를 사용하여 생성한 서명을 뜻한다. 이 서명은 토큰이 변조되지 않았음을 보장한다.

 

JWT의 장점은,

-쉽게 읽고 작성이 가능하다는 것이다. 또한 별도의 저장소에 의존하지 않고 서명을 통해 데이터의 무결성을 제공하여 자립성이 강한 토큰 형태라고 볼 수 있다.

 

 

그렇다고 장점만 있는 것은 아니고..

클레임의 양이 많아질 경우 토큰의 크기가 증가한다는 문제점이 있다. 

또한 보안의 취약성으로 인해 디폴트로 <만료 기간>을 가지기에, 꽤나 번거롭다는 단점이 있다.

 

≫  그럼에도 JWT는 웹 애플리케이션에서 사용자 인증 및 권한 부여 시 아주아주 유용하기 때문에

OAuth 및 OpenID Connect와 같은 프로토콜에서도 흔히 사용된다!

 

 

 

 

 

 

 

 

 

 

 

반응형