[ C. S. ] 인증 방식 개념

조만간 필요할 것 같아서 계속 기억해야 할 주요 개념 중 하나인 인증 방법과 관련된 내용을 정리해보도록 하겠습니다.

면접 중간에 배운 기억이 나는데 이미 퇴색한 것 같다.

모호하게 알려진 것은 실제로 “내 것”이 아닙니다.

쿠키

  • 쿠키를 통해 서버는 데이터를 브라우저에 삽입할 수 있습니다.

  • 당신에 대한 것들을 기억하기 위해

  • 웹 사이트를 방문하면 브라우저가 서버에 요청을 보냅니다.

  • 서버는 모든 데이터와 요청된 정보로 응답합니다.

  • 답변 외에도 브라우저에 저장하려는 쿠키가 있을 수 있습니다.

  • 사용자가 브라우저에 쿠키를 저장하면 사용자가 웹 사이트를 방문할 때마다 쿠키가 포함된 요청이 서버로 전송됩니다.

  • 쿠키는 도메인별로 제한됩니다.

    쿠키에도 유효기간(서버가 설정한 기간에 따름)이 있습니다.

    (예) YouTube에서 제공하는 쿠키는 YouTube로만 전송됩니다.

  • 쿠키는 인증 및 기타 정보를 저장할 수 있습니다.

  • 예를 들어, 웹사이트의 언어 설정이 변경되면 서버는 이에 대한 응답으로 쿠키를 반환하고 브라우저는 요청에 대한 응답으로 언어 값을 쿠키로 받아 저장합니다.

  • 따라서 다음에 웹 사이트를 방문하면 쿠키(언어 값)와 함께 서버로 전송되고 서버는 쿠키 값에 해당하는 언어로 페이지를 제공합니다.

HTTP 프로토콜

  • HTTP 프로토콜은 웹 사이트에 액세스하는 데 사용되는 프로토콜입니다.

  • 또한 무국적자입니다.

    이는 서버에 대한 각 요청이 이전 요청과 완전히 독립적으로 처리됨을 의미합니다.

    (요청 사이에 연결이 없습니다.

    메모리가 없습니다.

    )
  • 따라서 서버는 요청이 종료될 때 사용자가 누구인지 잊어버립니다.

  • 요청이 있을 때 클라이언트가 누구인지 알려주는 세션 및 토큰 방법이 있습니다.

세션

  • 동작 순서

    1. 로그인을 원하는 사용자는 자신의 ID와 PW를 서버로 전송
    2. 유효한 사용자이면 서버는 세션 DB에 사용자에 대한 정보를 생성합니다.

    3. 저장과 동시에 별도의 ID가 존재하며 이 세션 ID는 쿠키를 통해 브라우저에 저장됩니다.

    4. 따라서 동일한 웹사이트의 다른 페이지를 방문하면 브라우저는 세션 ID와 함께 쿠키를 서버로 보냅니다.

    5. 서버는 세션 ID로 들어오는 쿠키를 확인합니다.

      (이 시점까지 서버는 요청자가 누구인지 모릅니다.

      )
    6. 서버는 세션 id로 세션 db를 확인하여 해당 사용자가 누구인지 알아냅니다.

    7. 모든 사용자 정보가 서버에서 사용 가능한 것이 중요합니다!
      (사용자가 가지고 있는 것은 세션 ID 값입니다.

      )
    8. 쿠키는 세션 ID를 전송하는 데만 사용됩니다!
      즉, 쿠키는 중개자이며 쿠키는 기본 앱이 아닌 브라우저에만 존재합니다.

  • 요약하면 서버는 모든 사용자의 세션 정보를 유지하므로 사용자가 요청할 때마다 쿠키를 받아 세션 ID를 확인하고 사용자를 찾은 DB에 접속해야 합니다!

  • 따라서 사용자가 많아질수록 더 많은 DB 자원이 필수적이다.

  • 세션용 DB는 주로 Redis를 사용합니다.

    (빠르고 저렴한 DB)

  • 강제 로그오프와 같은 기능을 구현할 수 있습니다.

토큰

  • 기본 앱에서는 쿠키를 사용할 수 없으므로 이 경우 토큰을 사용하세요!
  • 토큰은 이상하게 보이는 문자열입니다.

JWT

  • 세션의 한계를 극복한 것 같았다.

  • JWT가 토큰 형식으로 사용자 인증을 처리하면 서버에 세션 DB가 필요하지 않습니다.

  • 또한 사용자를 인증하기 위해 많은 작업을 수행할 필요가 없습니다!

  • 서버는 토큰을 만들고 확인만 합니다.

  • 그러나 JWT는 암호화되지 않습니다.

    따라서 누구나 열어서 내용을 볼 수 있습니다.

    (비밀 정보가 JWT에 있는 경우 X)

  • 사용자에 대한 정보를 강력하게 관리하려면 JWT 대신 세션을 사용하는 것이 좋습니다.

  • 동작 순서

    1. 로그인을 원하는 사용자는 자신의 ID와 PW를 서버로 전송
    2. 서버는 사용자의 정보를 가져와 서명 알고리즘을 사용하여 서명을 생성합니다.

    3. 그러면 생성된 서명정보는 문자열 형태로 사용자에게 전달된다.

    4. 일반적으로 JWT는 세션 ID보다 훨씬 깁니다.

      (길이 제한은 없습니다.

      )
    5. 사용자가 요청을 보내면 세션 ID와 마찬가지로 “서명된 정보(토큰)”를 서버로 보내야 합니다.

    6. 서버는 토큰을 받으면 서명이 유효한지(변조되었는지) 확인하고 사용자를 인증합니다.