• 카테고리

    질문 & 답변
  • 세부 분야

    취업 · 이직

  • 해결 여부

    미해결

JWT 토큰 관련 질문입니다!

23.09.14 19:07 작성 조회수 253

1

안녕하세요!! JWT 토큰 관련해서 강의듣다가 궁금한점이 생겨서 질문드립니다 !

  1. 그럼 JWT 토큰 구조에서 signature가 인코딩된 Header+인코딩된 Payload+ 비밀키를 헤더에 명시된 알고리즘으로 서명한값이라고 하셨느데, 그럼 서버에서는 (인코딩된 Header+인코딩된 Payload) 값을 암호화하고 뒤에 붙은 signature랑 비교해서 같으면 허용된 유저로 받아 들이는건가요??

  2. access Token / refresh Token 방식에서 refresh Token의 탈취는 생각안하는 건가요? 그냥 access Token만 set-cookie로 하는 방식이랑 비교해서 저게 왜 더 안전한지 잘 안와닿습니다!

  3. access Token / refresh Token 방식에서 로그인 성공한 클라이언트가 서버에 추가적인 다른 요청을 보낼 때, access Token을 Header에 직접 담아야하고 refresh Token은 계속해서 cookie에 자동으로 담겨서 날라가는건가요??

  4. access Token / refresh Token 방식에서 요청을 했을 때, 만약 access token이 만료된 토큰이면 refresh token을 통해 access token을 받은 다음 Header에 담아서 요청을 하는거면 클라이언트 입장에서 2번의 요청을 보내야하는건가요?? 그럼 예를들어 유저는 버튼 2번을 눌러야하는건가요??

  5. access Token / refresh Token 방식에서 로그아웃할 때는 어떤식으로 처리를 해줘야하나요?? Spring + react 환경일 때, Spring 서버측에서 access Token / refresh Token 둘 다 없애는 건가요? 아니면 react에서 비워 버리는건가요?? 아니면 refresh Token만 쿠키에서 없애고 access Token은 그냥 만료기한 지나도록 나두는 건가요??

  6. 마지막으로 이전에 리액트랑 Spring으로 프로젝트를 한 경험이 있는데, 거기서 클라이언트가 리액트에 접속해서 로그인해서 refresh Token을 cookie에 담고 access token은 로컬 스토리지에 저장하고 있었는데, 브라우저 새로고침을 하니깐 refresh Token이랑 access Token이 사라졌던걸로 기억을 하고 있습니다. 원래 쿠키에 저장하면 새로고침해도 남아 있어야하는거 아닌가요?? 아니면 리액트랑 Spring 배포한 환경의 도메인이 달라서 크롬의 쿠키 정책상 때문인지.. 궁금합니다 !

적다보니 질문이 엄청 많아졌네요ㅎㅎ.. 요즘 이 강의로 cs공부를 하고 있는데 늘 감사합니다!!

답변 1

답변을 작성해보세요.

0

안녕하세요 돈우님 ㅎㅎ

 

  1. 그럼 JWT 토큰 구조에서 signature가 인코딩된 Header+인코딩된 Payload+ 비밀키를 헤더에 명시된 알고리즘으로 서명한값이라고 하셨느데, 그럼 서버에서는 (인코딩된 Header+인코딩된 Payload) 값을 암호화하고 뒤에 붙은 signature랑 비교해서 같으면 허용된 유저로 받아 들이는건가요??

>> 서명뿐만 아니라 만들어진 토큰을 기반으로 유저의 허용 비허용을 판단합니다.

 

  1. access Token / refresh Token 방식에서 refresh Token의 탈취는 생각안하는 건가요? 그냥 access Token만 set-cookie로 하는 방식이랑 비교해서 저게 왜 더 안전한지 잘 안와닿습니다!

>> 아니요. refresh 토큰 또한 탈취가 가능합니다. 다만 더 안전하기 위해서입니다.

먼저 다시 정의를 살펴볼게요.

refresh토큰은 access토큰이 만료되었을 때 다시 access 토큰을 얻기 위해 사용되는 토큰입니다. 이를 통해 access토큰이 만료됬을 때마다 인증에 관한 비용이 줄어들게 됩니다. 

 

refresh 토큰 >> access 토큰

이렇게 되는 것인데요. 방어막을 한개 쳤다라고 생각하시면 됩니다.

refresh 토큰 을 통해서 만료기한이 짧은 access 토큰 을 생성해서 만약 access토큰이 탈취당하더라고 해킹을 막을 수 있게 됩니다.

 

  1. access Token / refresh Token 방식에서 로그인 성공한 클라이언트가 서버에 추가적인 다른 요청을 보낼 때, access Token을 Header에 직접 담아야하고 refresh Token은 계속해서 cookie에 자동으로 담겨서 날라가는건가요??

>> 쿠키는 헤더입니다. 둘 다 헤더에 담겨서 요청이 들어갑니다.

CS지식의 정석 중 이 강의 참고 부탁드립니다.


웹브라우저의 캐시 #5. 쿠키(Cookie)

 

  1. access Token / refresh Token 방식에서 요청을 했을 때, 만약 access token이 만료된 토큰이면 refresh token을 통해 access token을 받은 다음 Header에 담아서 요청을 하는거면 클라이언트 입장에서 2번의 요청을 보내야하는건가요?? 그럼 예를들어 유저는 버튼 2번을 눌러야하는건가요??

>>

access 토큰 만료가 됨 > refresh 토큰 기반 > access토큰 요청

한번밖에 요청을 하지 않습니다.

 

  1. access Token / refresh Token 방식에서 로그아웃할 때는 어떤식으로 처리를 해줘야하나요?? Spring + react 환경일 때, Spring 서버측에서 access Token / refresh Token 둘 다 없애는 건가요? 아니면 react에서 비워 버리는건가요?? 아니면 refresh Token만 쿠키에서 없애고 access Token은 그냥 만료기한 지나도록 나두는 건가요??

>> 서버측에서 둘다 없앱니다.

 

  1. 마지막으로 이전에 리액트랑 Spring으로 프로젝트를 한 경험이 있는데, 거기서 클라이언트가 리액트에 접속해서 로그인해서 refresh Token을 cookie에 담고 access token은 로컬 스토리지에 저장하고 있었는데, 브라우저 새로고침을 하니깐 refresh Token이랑 access Token이 사라졌던걸로 기억을 하고 있습니다. 원래 쿠키에 저장하면 새로고침해도 남아 있어야하는거 아닌가요?? 아니면 리액트랑 Spring 배포한 환경의 도메인이 달라서 크롬의 쿠키 정책상 때문인지.. 궁금합니다 !

>> 쿠키에 저장하면 새로고침하면 남아있는게 정상입니다. 서버나 클라이언트에서 어떤 로직이 있는 것 같습니다.

 

또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.


돈우님의 프로필

돈우

질문자

2023.09.17

감사합니당!