[Spring#69] 세션 vs 토큰 인증 / JWT, Refresh, Access Token

김한준 Hanjun Kim·2024년 1월 17일
1

내일배움캠프

목록 보기
70/70
  • 세션 기반 인증과 토큰 기반 인증
    1. 세션 기반 인증(Session-Based Authentication):

      • 동작 원리: 사용자가 로그인하면 서버는 사용자에 대한 세션을 생성하고, 이 세션에 대한 고유한 세션 식별자를 발급합니다. 이 식별자는 일반적으로 쿠키에 저장되어 클라이언트에게 전송됩니다.
      • 상태 유지: 서버가 클라이언트의 세션을 유지하므로, 클라이언트는 각 요청 시마다 세션 식별자를 함께 전송하여 자신을 인증합니다.
      • 보안: 쿠키를 안전하게 다루고 전송하는 것이 중요하며, 세션 하이재킹과 같은 공격에 취약할 수 있습니다.
      • 서버 측 리소스 사용: 서버는 세션 정보를 저장하고 관리하기 때문에 상당한 서버 리소스가 소비될 수 있습니다.
    2. 토큰 기반 인증(Token-Based Authentication):
      - 동작 원리: 사용자가 로그인하면 서버는 클라이언트에게 액세스 토큰을 발급합니다. 이 토큰은 클라이언트가 리소스에 접근할 때 사용됩니다.
      - 상태 비유지: 서버는 클라이언트의 상태를 관리하지 않고, 각 요청에 필요한 정보를 토큰에 포함시켜 클라이언트에 전달합니다.
      - 보안: 토큰은 서명되어 있어 변조가 어렵고, HTTPS와 함께 사용될 때 안전하게 전송됩니다. 또한 토큰은 일반적으로 세션과 달리 쿠키가 아닌 다양한 위치에 저장될 수 있습니다.
      - 확장성: 토큰은 서버의 상태를 저장하지 않기 때문에 서버 측 리소스를 효율적으로 사용할 수 있으며, 분산 시스템에서 확장성이 용이합니다.

      세션 기반 인증은 전통적이고 간단한 방법이지만 서버 측에서 상태를 유지해야 하며, 토큰 기반 인증은 보다 분산된 환경과 확장성을 필요로 하는 모던 애플리케이션에 적합한 방법입니다.


  • JWT, Refresh, Access Token
    1. JWT (JSON Web Token):

      • 정의: JWT는 정보를 안전하게 전송하기 위한 토큰 포맷입니다. 이는 일반적으로 JSON 형식을 사용하며, 서명이나 암호화로 보호됩니다.
      • 구성 요소: JWT는 세 부분으로 구성되어 있습니다.
        • Header: 토큰의 유형 및 서명 알고리즘과 같은 메타데이터를 포함합니다.
        • Payload: 토큰에 포함되는 클레임(Claim) 정보가 담겨 있습니다. 클레임은 사용자 정보 및 기타 메타데이터를 포함할 수 있습니다.
        • Signature: 서버에서 생성되고 서명되어 클라이언트에게 전송되는 부분으로, 토큰이 변조되지 않았음을 검증하는 역할을 합니다.
    2. Access Token:

      • 정의: Access Token은 클라이언트가 보호된 리소스에 접근하기 위한 권한을 부여하는 토큰입니다.
      • 역할: 사용자가 로그인하면 인증 서버에서 발급되며, 클라이언트는 이 토큰을 사용하여 리소스 서버에서 보호된 리소스에 접근합니다.
      • 수명: 일반적으로 짧은 수명을 가지며, 만료되면 클라이언트는 새로운 Access Token을 얻기 위해 Refresh Token을 사용합니다.
    3. Refresh Token:
      - 정의: Refresh Token은 Access Token이 만료된 경우에 새로운 Access Token을 얻기 위해 사용되는 토큰입니다.
      - 역할: 보안을 강화하기 위해 Access Token의 수명을 짧게 유지하면서, Refresh Token을 사용하여 클라이언트는 새로운 Access Token을 얻을 수 있습니다.
      - 수명: 일반적으로 Access Token보다 더 긴 수명을 가집니다. Refresh Token도 만료될 수 있으며, 만료 시 사용자는 다시 로그인해야 합니다.
      - 안전성: Refresh Token은 주로 안전한 저장소에 저장되어야 하며, 서버 간 통신 시에는 안전한 채널을 통해 전송되어야 합니다.

      일반적으로 사용자가 로그인하면 Access Token과 함께 Refresh Token도 발급되며, Access Token이 만료되면 Refresh Token을 사용하여 새로운 Access Token을 얻게 됩니다. 이를 통해 클라이언트는 지속적으로 리소스에 접근할 수 있고, 보안을 유지할 수 있습니다.

profile
개발이 하고싶은 개발지망생

0개의 댓글