다양한 로그인 인증방식

이종경·2025년 7월 8일
0

쿠키 인증

쿠키는 클라이언트(브라우저)에 저장되는 Key-Value형태의 데이터입니다. 클라이언트는 서버에 요청을 보낼 때, 쿠키를 함께 전송하여 사용자 식별이나 로그인 상태 유지에 활용합니다. HTTP는 기본적으로 무상태(stateless)이므로, 쿠키를 통해 생성된 사용자 정보(쿠키)를 계속 전달하여 로그인 유지 등의 상태를 관리하는 것 입니다.

인증 방식

쿠키인증

  1. 클라이언트(브라우저)가 서버에 요청(접속)을 보냅니다.
  2. 서버는 클라이언트의 요청에 대한 응답을 작성할 때, 클라이언트 측에 저장하고 싶은 정보를 응답 헤더의 Set-Cookie에 담아 전달합니다.
  3. 이후 클라이언트는 요청을 보낼 때마다, 저장된 쿠키를 요청 헤더의 Cookie 에 담아 보냅니다.
    서버는 쿠키에 담긴 정보를 바탕으로 해당 요청의 클라이언트가 누군지 식별합니다.

장점

  • 클라이언트가 인증 정보를 관리하므로 서버 부하가 적습니다.

단점

  • 쿠키에 인증 정보를 포함하므로 사용자가 쿠키 값을 임의로 수정하거나 탈취 될 경우 위조될 수 있습니다.
  • 저장 용량(도메인당 최대 20개, 하나당 4KB)에 제한이 있고, 쿠키가 커지면 네트워크 부하가 증가합니다.

세션 인증

세션은 클라이언트의 민감한 인증 정보를 브라우저가 아닌 서버에 저장하고 관리하는 방식입니다. 사용자가 로그인 하면 서버 메모리나 DB에 저장하고, 그 세션을 식별할 세션 ID를 발급합니다. 서버는 세션 ID로 내부의 세션 저장소를 조회해 로그인 상태를 확인합니다.

인증 방식

세션 인증

  1. 사용자가 로그인하면 서버는 세션을 생성하여 메모리나 DB등에 사용자 정보를 저장하고, 고유한 세션 ID를 발급합니다. 이 세션 ID는 쿠키를 통해 클라이언트에 전달됩니다.
  2. 이후 클라이언트는 요청을 보낼 때마다 세션 ID가 담긴 쿠키를 전송하고, 서버는 세션 저장소에서 해당 ID로 저장된 사용자 정보를 조회하여 인증 여부를 판단합니다.

장점

  • 민감한 인증 정보를 클라이언트에 저장하지 않기 때문에 보안성이 높습니다.
  • 사용자 상태를 서버에서 관리하므로 세밀한 제어가 가능합니다.
    • 디바이스별 로그인 관리 등

단점

  • 서버에 상태를 저장하기 때문에 서버의 부하가 증가합니다.

JWT 인증

JWT는 인증에 필요한 정보들을 암호화시킨 JSON 토큰을 의미합니다. JWT 자체에 사용자 인증에 필요한 정보가 포함되고 전자 서명으로 위변조 여부를 검증할 수 있기 때문에, 별도의 서버 세션 저장소 없이 무상태(stateless) 인증이 가능합니다.

토큰 탈취에 대비해 Access Token의 만료 시간을 짧게 부여하고 Refresh token을 사용하여 재발급하는 체계를 갖추는게 일반적이며, 이 Refresh Token은 HttpOnly 쿠키 로 저장하여 엄격히 보호하는 방식도 많이 사용됩니다.

인증방식

JWT 인증

  1. 사용자가 로그인하면 서버는 비밀 키로 서명한 JWT 토큰(Access Token)을 생성하여 클라이언트에 발급합니다.
  2. 클라이언트는 JWT 토큰을 브라우저 저장소(local storage, cookie 등)에 저장하고, 이후 서버에 요청을 보낼 때 마다 HTTP Authorization 헤더에 JWT를 포함하여 전송합니다.
  3. 서버는 JWT의 서명을 검증하여 서버가 발급한 토큰인지 확인하고, 페이로드에서 사용자 정보를 추출해 해당 요청이 인가된 사용자의 요청인지 판단합니다. JWT에 포함된 만료 시간도 확인하여 토큰이 유효한지 확인한 후 요청에 대한 응답을 반환합니다.

장점

  • 클라이언트가 토큰을 관리하기 때문에 다른 방식들에 비해 서버 부하가 적습니다.
  • 토큰 검증 단계를 거치기 때문에 쿠키 인증 방식보다 안전합니다.

단점

  • 서버에서는 토큰을 검증하는 것뿐이지, 해당 토큰을 관리하는 것이 아니기에 세션보다는 보안상으로 취약합니다.

OAuth 인증

OAtuh 2.0는 인증이 아닌 인가를 위한 표준 프로토콜로, 제 3자 서비스에 인증을 위임하는 방식입니다. OAuth를 사용하면 사용자가 자신의 아이디/비밀번호를 서비스에 직접 제공하지 않고도 신뢰 가능한 외부 플랫폼에 인증을 맡겨 그 결과만 받아오는 형태로, 사용자 입장에서는 새로운 계정 생성 없이 기존 계정으로 서비스를 이용할 수 있습니다.

인증 방식(Authorization Code Grant)

OAuth

  1. 클라이언트가 인증 서버에게 인가 요청을 합니다.
  2. 사용자가 OAuth 제공자의 로그인 화면에서 아이디/비밀번호로 인증하고, 해당 애플리케이션이 요청한 권한 범위에 동의합니다.
  3. OAuth 제공자는 인증이 완료되면 클라이언트에 인가 코드(Authorization Code)를 발급하여 리다이렉션 URL로 전달합니다.
  4. 클라이언트는 받은 인가 코드를 OAuth 제공자의 토큰 엔드포인트로 보내 Access Token을 교환받습니다.
  5. 클라이언트는 발급받은 Access Token을 사용해 OAuth 제공자의 API 호출하거나, 사용자 프로필 정보를 요청하여 로그인 처리를 완료합니다.
    • 예를 들어 구글의 사용자 정보 API를 호출해 사용자 이메일 등을 얻은 뒤 자체 서비스에서 세션을 생성

장점

  • 신뢰할 수 있는 OAuth 제공자에게만 비밀번호를 입력하면 되므로 보안성이 뛰어납니다.

단점

  • OAuth 구현 복잡성이 증가합니다.

참고
세션 vs 토큰 vs 쿠키? 기초개념 잡아드림. 10분 순삭!
로그인 인증 4가지 방법
[인증/인가] 쿠키 VS 세션 VS 토큰 (JWT) 방식 중 무엇을 사용할까?
효율적인 로그인 시스템 구축을 위한 인증 방식 비교
로그인 인증방식 어떤게 좋을까? Session VS JWT
🌐 JWT 토큰 인증 이란? (쿠키 vs 세션 vs 토큰)세션 및 쿠키, JWT, OAuth2?
OAuth 2.0의 개념과 인증 방식

profile
작은 성취들이 모여 큰 결과를 만든다고 믿으며, 꾸준함을 바탕으로 개발 역량을 키워가고 있습니다

0개의 댓글