inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

로그인 문제 해결하기

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

해결된 질문

975

박재호

작성한 질문수 27

1

 

안녕하세요 제로초님 

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

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


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

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

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

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

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

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

nodejs redux react express Next.js

답변 1

0

제로초(조현영)

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

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

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

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

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

0

박재호

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

0

박재호

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

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

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

0

제로초(조현영)

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

넥스트 버젼 질문

0

90

2

로그인시 401 Unauthorized 오류가 뜹니다

0

104

1

무한 스크롤 중 스크롤 튐 현상

0

192

1

특정 페이지 접근을 막고 싶을 때

0

116

2

createGlobalStyle의 위치와 영향범위

0

102

2

인라인 스타일 리렌더링 관련

0

97

2

vsc 에서 npm init 설치시 오류

0

157

2

nextjs 15버전 사용 가능할까요?

0

166

1

화면 새로고침 문의

0

129

1

RTK에서 draft, state 차이가 있나요?

0

160

2

Next 14 사용해도 될까요?

0

455

1

next, node 버전 / 폴더 구조 질문 드립니다.

0

359

1

url 오류 질문있습니다

0

214

1

ssh xxxxx로 우분투에 들어가려니까 port 22: Connection timed out

0

391

1

sudo certbot --nginx 에러

0

1293

2

Minified React error 콘솔에러 (hydrate)

0

477

1

카카오 공유했을 때 이전에 작성했던 글이 나오는 버그

0

255

1

프론트서버 배포 후 EADDRINUSE에러 발생

0

337

1

npm run build 에러

0

525

1

front 서버 npm run build 중에 발생한 에러들

0

399

1

서버 실행하고 브라우저로 들어갔을때 404에러

0

350

2

css 서버사이드 랜더링이 적용되지 않아서 문의 드립니다.

0

290

1

팔로워 3명씩 불러오고 데이터 합쳐주는걸로 바꾸고 서버요청을 무한으로하고있습니다.

0

249

2

해시태그 검색에서 throttle에 관해 질문있습니다.

0

206

1