개발자

JWT 인증과 로그인 상태 유지

2023년 08월 27일조회 1,268

웹 프로젝트를 진행하는 과정에서 jwt 인증과 로그인 상태 유지에 관해 질문이 있어 글 남깁니다. 현재 서버측에서 로그인 요청을 받고 로그인 완료 시에 클라이언트 측으로 access token 과 refresh token 을 응답으로 주고 client 측에서는 refresh token 은 cookie 에 access token 은 클라이언트 측 로컬 변수에 저장해 사용할 예정입니다. 로컬 변수에 access token 을 저장하면 페이지 리로드나 페이지 이동 시에 로그인 상태를 유지해야 하는데, 이를 처리하는 부분에서 고민점이 생겼습니다. 일단 인증이 필요한 요청이 아니더라도 서버 측에서 로그인 된 사용자라면 정보를 다르게 반환해줘야 하기 때문에 모든 요청에 대해서 로그인 된 사용자의 요청이라면 access token 을 헤더에 포함해 요청을 보내도록 할 것입니다. 첫번째 해결 방안은 클라이언트 측에서 페이지를 로드할 때 cookie 에 refresh token 값이 존재하면 로그인 된 상태라고 판단하고 서버측에 access token 재발급 요청을 보내는 방법입니다. 두번째 해결 방안은 서버측에서 인증이 필요한 요청을 받았을 때 access token 이 존재하지 않으면 받은 요청의 cookie 값을 확인하고 로그인 된 사용자라면 재발급 요청 신호를 클라이언트 측으로 보내고 로그인 된 사용자가 아니라면 로그인이 필요하다는 신호를 클라이언트 측으로 보내고, 서버측에서 인증이 필요하지는 않지만 로그인 된 사용자라면 정보를 다르게 반환해줘야 하기 때문에 access token 이 없이 온 요청에 대해서 cookie 값을 확인하고 로그인 된 사용자지만 access token 이 없으면 재발급 신호를 클라이언트 측에 보내고 클라이언트 측에서 재발급 요청을 보내고 access token 을 포함해 진행 중이던 요청을 다시 보내는 방법 이렇게 두가지를 생각해 봤습니다. 가장 간단한 방법은 access token 을 cookie 나 로컬 스토리지에 저장하는 방법이지만 보안을 위해 이 방법은 제외했습니다. 서버측에서 사용자의 로그인 상태를 확인하는 것은 jwt 의 장점을 무시하는 것 같기도 하고 서버측에서 지속적으로 사용자의 로그인 상태를 확인해야 해서 부담이 있을 것 같고 클라이언트 측에서 사용자의 로그인 여부를 판단하는 것은 과연 옳바른 해답인지 의문이 들어 질문 남깁니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 2

인기 답변

투안 응 우옌님의 프로필 사진

JWT 인증 및 로그인 상태 유지는 안전한 웹 응용 프로그램 개발에 중요한 부분입니다. 다음은 이를 수행하는 기본 가이드입니다. 1. JWT 인증: - JWT는 JSON 형식의 데이터를 안전하게 전송하기 위한 방법입니다. - 사용자가 성공적으로 로그인하면, 인증 정보를 담은 JWT를 생성하고 비밀 키로 암호화합니다. - 사용자가 JWT를 요청과 함께 전송할 때, 해당 JWT를 해독하고 서명을 확인하여 데이터의 변조 여부를 검증합니다. 2. 로그인 상태 유지: - 사용자가 성공적으로 로그인하면, JWT에 로그인 정보를 저장하고 사용자에게 반환합니다. - 사용자는 로그인 이후 모든 요청과 함께 JWT를 전송하여 인증을 증명합니다. - 애플리케이션은 요청을 수신할 때마다 JWT를 확인하고 검증하여 사용자의 인증 상태를 확인합니다. 3. 만료 시간 관리: - JWT에서 만료 시간(expiration time)을 설정하는 것이 중요합니다. 만료 시간 이후에는 JWT가 무효화됩니다. - 이를 통해 일정 시간 후에 사용자가 다시 로그인해야 하는 보안을 제공합니다. 4. 리프레시 토큰: - 사용자가 너무 자주 로그인을 요청하지 않도록 하려면 리프레시 토큰을 사용할 수 있습니다. - 리프레시 토큰은 주로 만료 기간이 더 긴 토큰으로, 만료된 JWT를 갱신하기 위해 사용됩니다. 5. 보안 고려 사항: - JWT가 암호화되고 비밀 키로 서명되었는지 확인합니다. - JWT에 민감한 정보(예: 비밀번호)를 저장하지 않도록 합니다. 6. 중복 로그인 관리: - 중복 로그인을 허용하지 않도록 처리할 수 있습니다. 예를 들어, 로그인 시마다 새로운 JWT를 발급하거나, 사용자의 디바이스 정보를 고려하여 로그인을 제한할 수 있습니다. 7. 인증 실패 처리: - JWT의 인증에 실패하면 사용자를 로그아웃하고 인증이 필요한 페이지로 리디렉션하도록 합니다. 8. 갱신 시간 관리: - 리프레시 토큰의 만료 기간과 갱신 시간을 적절하게 관리하여 보안과 편의성을 조화시킵니다.

이상선님의 프로필 사진

https://medium.com/@sunyi233/id-token%EA%B3%BC-access-token-d285e647ee23

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!