강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

박재호님의 프로필 이미지
박재호

작성한 질문수

[리뉴얼] React로 NodeBird SNS 만들기

로그인 문제 해결하기

로그인 토큰으로 구현시 질문..

해결된 질문

작성

·

965

1

 

안녕하세요 제로초님 

jwt토큰으로 로그인을 구현할때 a. 클라이언트에서 매 요청 마다 액세스토큰 만료기한 검사를해서 만료됬거나 만료시간이 가까워지면 리프레쉬토큰을 헤더에 담아서 요청하여 새로 운엑세스 토큰을 받는 로직과 

b. 서버에서 만료기한 검사를하여 만료기한이 넘어갔다면 에러 코드를 보내고. 클라이언트에서 해당 에러코드를 받았을 때 새로운 액세스토큰을 발급하는 api요청을 하고서  실패했던 api를 재요청하는 로직이 있는데


1. 위 두가지의 방법에서  제로초님이 더 선호하시는 방법은 무엇인가요??

2. 각 방식의 장단점이 보이기는 하는데.. a. 방식은 매 요청마다 토큰 만료기한을 검사하는 로직이 실행되는게 단점으로 보이는데 요게 성능에 문제가 되는 부분일까요??

  3. 로그인된 상태에서 리프레쉬토큰도 만료되면 새로 발급받는 건가요?? 리프레쉬토큰이 만료되어 갑자기 로그아웃되는 상황이 발생하여 사용성에 안좋을거같은데  또, 이렇게 한다면 리프레쉬토큰은 로그아웃하지 않는한 영구히 보존되는거라 다른 조치가 필요하지 않을까 싶어서 어떻게 활용하는지 궁금합니다.

4. 로컬스토리지로 토큰을 보관하였을때 문제가 로컬스토리지는 만료기한이없고  로그아웃 또는 직접 삭제하지 않는한 영구히 보존되는걸로 알고있는데 로컬스토리지로 보관하는 방법으로는  모든 브라우저창이 닫힐때 로그아웃처리(로컬스토리지 데이터삭제) 구현을 못하는건가요??

5. 쿠키에 httpOnly를 적용하면 프론트서버에선 접근이 가능하다고 말씀해주셨는데 리엑트로 프로젝트를 진행한다면 프론트엔드 코드에서는 접근할수가 없던데 맞나요!?

항상 감사합니다 제로초님!

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

1. 클라이언트에서 만료체크를 하고 액세스토큰을 서버에 보내는 게 괜찮아보입니다. 서버에 요청을 하나라도 덜 보내는 게 좋습니다. 어차피 서버에서도 체크는 하겠지만요.

2. 단순히 체크하는 것으로는 성능에 영향 없습니다.

3. 리프레쉬토큰도 영구가 아닙니다. 일주일, 한달 이정도 기간 안에 만료시키는 것이 좋습니다. 그정도 기간 안에 특정 동작을 한다면 리프레시토큰을 재발급해주는 것도 방법이고요. 만료 기간 안에 활동을 안하면 로그아웃 시켜야합니다.

4. 요즘은 세션스토리지를 써도 브라우저가 종료되지 않아서 토큰이 안 지워집니다. 프론트에서 주기적으로 체크해서 지우는 게 좋습니다.

5. 프론트 서버에서 접근 가능합니다. 프론트엔드라고 말씀하신 건 프론트 서버가 아니라 브라우저 말씀하시는 것 같은데요. 브라우저는 안 됩니다.

박재호님의 프로필 이미지
박재호
질문자

시원한 답변 너무 감사드립니다 덕분에 갈증이 해소됬습니다!!

박재호님의 프로필 이미지
박재호
질문자

5번에서 추가질문.. 하나 해도 될까요
넥스트같이 ssr 구성을 하지 않는 일반적인 리엑트 프로젝트로 진행할때 프론트 서버는 없으니
httpOnly로 쿠키값을 세팅한다면  서버로부터 받은 토큰을  쿠키에 저장하는 방식은 결국  
header authrozation에 토큰을 꺼내서 담는 방식은 못하는거네요?? 
쿠키는 매 요청마다 자동으로 포함되어 보내지기 때문에  header authrozation에 담아서 보내줄 필요도 없는것이구요..

토큰을 꼭 header authrozation에 담을 필요가 없다로 귀결됬는데 찾아보니 권장사항이지 필수는 아니여서 httpOnly로 설정한경우는 부득이하게 헤더 필드값으로 넣는 방식을 사용하지 못한다..

제가 이해한것이 맞을까요? 

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

네 맞습니다. 근데 쿠키에 담는 것을 그렇게 추천드리지는 않습니다. 쿠키는 모든 요청에 포함되어 트래픽 용량이 늘어납니다. 저도 요즘에는 로컬스토리지에 토큰을 담아 필요할 때만 오쏘라이제이션 헤더에 넣고 있습니다.

박재호님의 프로필 이미지
박재호

작성한 질문수

질문하기