inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)

시큐리티 자동로그인

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

1475

작성자 없음

작성한 질문수 0

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번에 대해서는 어떻게 생각하시는지 궁금합니다!

vue.js aws spring-boot jpa spring-security

답변 1

0

인프런 AI 인턴

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

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

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

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

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

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

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

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

Deprecated 관련 사항들

0

104

2

깃헙 collaboator 초대 관련

0

89

1

강의 듣다가 도커 이미지 생성시 각각도 가능하나 그렇게 사용하는데가 많은지 모르겠다라는 말을 듣고 남김니다

0

157

2

logout 후에 login 페이지 이동은 어디서 시켜주는건가요?

0

233

1

다중 데이터를 삭제 할 때

0

271

2

querydsl Q class 이슈

0

415

2

Windows WSL Vue 설정

2

247

1

Dip, @transactional

0

189

1

[vite] http proxy error: /auth/login

0

1045

2

로그인 하고 나서 GET요청으로 메인페이지 요청

0

234

2

GitHub Collaborator 초대 관련

0

258

2

Window에서 Vue.js 설정

0

321

2

(솔루션 수정)'tsyringe' Error: TypeInfo not known for "클래스명"

0

713

2

collaboator로 초대받을 수 있을까요??

0

283

2

SecurityMockContext 로부터 유저 정보를 가져오기

0

262

1

given 부분이 길어질 때 어떻게 처리하면 좋을까요?

0

318

1

섹션9 프론트의 코드를 보고싶습니다,,,

0

423

1

Spring Security - defaultSuccessUrl 질문

0

627

1

강의 화면이 나오지 않습니다. 음성과 자막만 나와요

0

302

1

JPAQueryFactory(em)의 객체 생성자 오류에 대해서 질문이 있습니다ㅜㅜ

0

690

2

ExceptionHandler가 AccessDeniedHandler(Http403Handler)를 먹어버리는 현상

0

1182

2

섹션10 언제 나오나요?

0

485

1

CommentService에서 Repository를 호출하지 않는데도

0

343

1

Editor....를 활용한 패턴에 질문있습니다.

0

496

1