• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

세션과 토큰을 이용한 로그인 유지 방식의 차이점

23.07.10 01:25 작성 23.07.10 01:26 수정 조회수 823

0

안녕하세요! 강의를 보다가 의문점이 생겨 질문드립니다.

크게 아래와 같이 두 가지 질문이 생겼습니다.

  1. 로그인 유지를 위해 remember-me 토큰을 발급하고 해당 토큰의 유효기간을 (예를 들어) 30일로 설정하여 유저의 세션이 만료되어도 로그인이 풀리지 않게 한다면 단순히 최초에 저장되는 세션의 유효기간을 30일로 늘리는 것과 비교해 보안 측면에서 어떠한 장점을 갖는지 의문이 들었습니다.

  2. 결론적으로 만약 리프레시 토큰을 사용한다고 하면 리프레시 토큰이 만료되기 전에 이를 갱신할 책임은 클라이언트에게 있는 건가요?? DB를 사용하지 않는 remember-me 방식이라고하면 토큰에서만 expired 관련 정보를 알 수 있을 것이고 그렇다면 클라이언트에서 이를 디코딩하여 남은 유효기간을 확인 후 직접 다시 요청을 하는 식의 처리를 해서 Cookie를 갈아주어야 하는 것인가하는 생각이 들었습니다.

먼저 2번의 경우 강의에서의 세션=액세스 토큰, remember-me 토큰=리프레시 토큰이라고 비슷하게 생각할 수 있을 것 같아서 카카오 api 문서를 참고해봤는데,

카카오에서는 리프레시 토큰의 유효기간이 1달 이내일 경우 액새스 토큰 갱신 요청을 보낼 때 리프레시 토큰도 같이 갱신하여 보내준다고 하더라구요. (https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#refresh-token)

2번의 경우 이렇게 이해하면 되는건지와, 1번에 대해서는 어떻게 생각하시는지 궁금합니다!

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.07.12

안녕하세요, 인프런 AI 인턴이에요.

세션과 토큰을 이용한 로그인 유지 방식의 차이점에 대해 알려드릴게요.

세션 방식은 서버에서 유저의 로그인 정보를 관리하고, 클라이언트에게 세션 ID를 부여하여 로그인 상태를 유지합니다. 세션의 유효기간을 설정하여 일정 시간 이후에 로그인이 만료되도록 할 수 있습니다. 이 경우에는 유효기간이 지나면 클라이언트가 다시 로그인해야 합니다.

토큰 방식은 서버에서 토큰을 발급하고, 클라이언트에서는 발급받은 토큰을 저장하고 유효성을 검증하여 로그인 상태를 유지합니다. 토큰은 주로 JSON Web Token(JWT) 형식으로 사용되며, 토큰에는 유효기간이 포함되어 있습니다. 만약 토큰의 유효기간이 만료되면 클라이언트는 토큰을 갱신해야 합니다.

서버에서 리프레시 토큰을 사용하는 경우에는 리프레시 토큰이 만료되기 전에 클라이언트가 이를 갱신해야 합니다. 이때, 클라이언트는 유저의 인증정보를 포함한 리프레시 토큰을 서버에 전달하여 새로운 액세스 토큰을 발급받는 과정을 거치게 됩니다. 따라서, 클라이언트는 리프레시 토큰의 만료기간을 확인하고, 새로운 액세스 토큰을 발급받기 위해 서버에 요청을 보내야 합니다.

DB를 사용하지 않는 remember-me 방식에서는 토큰에만 만료 관련 정보가 포함되어 있을 수 있습니다. 따라서, 클라이언트는 토큰을 디코딩하여 남은 유효기간을 확인하고, 필요 시 클라이언트에서 서버에 요청을 보내어 새로운 토큰을 발급받아야 합니다.

위의 방식들은 각각 장단점을 가지고 있으며, 어떤 방식을 선택하느냐는 개발 환경이나 보안 요건에 따라 다를 수 있습니다. 보안 측면에서 더 안전한 방식을 선택하기 위해서는 각 방식의 특징과 취약점을 고려하여 구현해야 합니다.

더 자세한 정보나 구체적인 예시에 대해서는 강의나 공식 문서를 참고해주세요. 감사합니다.