본문 바로가기
코드 스테이츠

세션 기반 자격 증명 방식 / 토큰 기반 자격 증명 방식

by 한휘용 2023. 7. 13.
728x90

세션 기반 자격 증명 방식

사용자의 인증 정보를 서버 측의 세션에 저장하여 인증을 유지하는 방식을 세션 기반 자격 증명 방식이라고 합니다.

사용자가 로그인하면 서버는 해당 세션에 사용자의 인증 정보를 저장하고, 이후 요청에서 세션을 통해 인증을 확인합니다.

 

세션 기반 자격 증명 방식은 여러 특징을 가지고 있습니다.

 

✅ 세션 기반 자격 증명의 특징

 

1. 상태 유지

서버는 사용자의 인증 상태를 세션에 유지합니다.

사용자가 로그인하면 서버는 세션을 생성하고, 해당 세션에 사용자의 인증 정보를 저장합니다.

이후 요청에서 서버는 세션을 참조하여 사용자가 인증되었는지 확인합니다.

 

2. 서버 측에서의 세션 관리

세션 기반 자격 증명 방식은 서버 측에서 세션을 관리해야 합니다.

세션은 일정 기간 동안 유지되며, 서버는 세션의 유효성을 검사하고 만료된 세션을 정리합니다.

 

3. 확장성에 제한

세션 기반 자격 증명은 서버 측에서 세션을 관리하므로, 여러 서버 간에 세션을 공유하거나 로드 밸런싱을 적용하기 어렵습니다. 따라서 대규모 및 분산 환경에서의 확장성에 제한이 있을 수 있습니다.

 

4. 클라이언트와 서버 간의 의존성

세션 기반 자격 증명은 클라이언트와 서버 간의 의존성이 높습니다.

클라이언트는 요청 시 세션 식별자를 전달해야 하며, 서버는 해당 세션을 찾아 인증을 처리해야 합니다.

 

 

세션 기반 자격 증명 방식은 많은 웹 애플리케이션에서 사용되는 전통적인 방식입니다.

로그인 후 세션을 통해 사용자의 인증 상태를 유지하고, 요청마다 세션을 참조하여 인증을 확인합니다.

그러나 대규모 및 분산 환경에서는 확장성에 제한이 있을 수 있으므로 이를 고려하여 적절한 인증 방식을 선택해야 합니다.

 

이러한 세션 방식 이외에 현대적인 웹 애플리케이션에서 점차 많이 사용되고 있는 방식이 바로 토큰 기반 자격 증명 방식입니다.

 

 

토큰 기반 자격 증명 방식

인증을 위해 사용되는 정보를 토큰 형태로 사용하는 인증 방식을 토큰 기반 인증이라고 합니다.

토큰 기반 자격 증명 방식은 인증된 사용자의 정보를 토큰에 저장하고, 접근 권한을 부여해 접근 권한이 부여된 특정 리소스에만 접근할 수 있게 하는 방식이다.

사용자가 인증되면 서버에서 토큰을 발급하고, 이후 요청에서 토큰을 전달하여 인증을 수행합니다.

 

예를 들어 오락실에서 게임을 하기 위해 토큰을 기계에 토큰을 넣었다고 생각해봅시다.

이 토큰을 기계에 지불함으로써 기계의 서비스를 이용할 수 있는 권한을 얻었습니다.

즉, 나는 돈을 지불 했고, 이 시설(혹은 서비스)을 사용할 수 있어! 라는 의미입니다.

 

예를 하나 더 들어보겠습니다.

 

만약 특정 빌딩을 방문하여 임시 출입 카드를 발급받아야 한다고 생각해봅시다.

안내 데스크에서 출입카드를 발급받으려면 안내 데스크 직원의 요청에 따라서 방문자 목록에 여러분의 신원 정보(이름, 전화번호, 방문 회사, 방문 목적 등)를 입력하고, 임시 출입 카드를 건네받습니다.

 

여기에서 신원 정보는 자신을 증명하는 자격 증명 정보(Credential)에 비유될 수 있고, 임시 출입 카드는 인증된 여러분을 증명하는 토큰에 비유될 수 있습니다.

 

임시로 발급받은 출입카드의 경우, 빌딩 내 모든 장소의 출입이 가능한 것이 아닌, 방문하는 특정 층의 사무실에만 출입이 가능할 것입니다.

 

이처럼 애플리케이션에서 사용되는 토큰 역시 인증된 사용자의 자격을 증명하는 동시에 접근 권한을 부여해 접근 권한이 부여된 특정 리소스에만 접근할 수 있게 하는 역할을 합니다.

 

 

✅ 토큰 기반 자격 증명의 특징

 

1. 상태를 유지하지 않음

토큰 기반 인증은 서버가 사용자의 상태를 유지할 필요가 없습니다.

사용자가 인증되면 서버는 토큰을 발급하고, 클라이언트는 이 토큰을 이용하여 인증을 수행합니다.

서버는 클라이언트의 토큰을 검증하여 인증을 처리하므로 상태를 유지할 필요가 없습니다.

 

2. 확장성과 유연성

토큰 기반 인증은 서버 측에서 세션을 관리할 필요 없이 독립적으로 동작할 수 있으므로 확장성과 유연성이 높습니다.

서버의 부하를 줄이고, 여러 서버 간에 토큰을 공유하여 인증을 유지할 수 있습니다.

 

3. 보안성

토큰은 서버에서 서명되어 있어 위조를 방지하고, 암호화되어 있어 내용이 안전하게 전달됩니다.

또한, 토큰은 제한된 유효 기간을 가지며, 재발급이나 갱신이 가능하므로 보안성이 높아집니다.

 

4. 클라이언트의 다양한 플랫폼 지원

토큰 기반 인증은 클라이언트의 다양한 플랫폼(웹, 모바일, API 등)을 지원할 수 있습니다.

토큰은 HTTP 요청 헤더나 쿼리 매개변수에 포함될 수 있으므로, 클라이언트가 어떤 플랫폼을 사용하든 유연하게 처리할 수 있습니다.

 

토큰 기반 인증은 많은 웹 및 모바일 애플리케이션에서 널리 사용되는 인증 방식입니다.

클라이언트가 토큰을 갖고 있기 때문에 세션 관리의 부담을 줄이고, 분산 환경에서의 인증을 효율적으로 처리할 수 있습니다. 이를 통해 보안성과 사용자 경험을 개선할 수 있습니다.

 

세션의 경우 서버 확장 시, 세션 불일치 문제가 발생할 수 있지만 Sticky Session, Session Clustering, Session 저장소의 외부 분리 등의 작업을 통해 보완하고 있습니다.

그리고 토큰의 경우, 기본적으로 토큰 무효화를 할 수 없지만 key/value 쌍의 형태로 저장되는 Redis 같은 인메모리 DB에 무효화시키고자 하는 토큰의 만료 시간을 짧게 주어 해당 토큰을 사용하지 못하게 하는 등의 방법을 사용해 토큰 무효화 문제를 보완하고 있습니다.
728x90

'코드 스테이츠' 카테고리의 다른 글

OAuth 2  (0) 2023.07.18
JWT(JSON Web Token)  (0) 2023.07.14
Spring Security - 보안  (0) 2023.07.10
테스팅(Testing) - 단위 테스트  (0) 2023.06.28
트랜잭션(Transaction)  (0) 2023.06.26