api 구현중 jwt 토큰 발생시 리플리쉬토큰 처리방법?

api 구현중 jwt 토큰 발생시 리플리쉬토큰 처리방법?

QA

api 구현중 jwt 토큰 발생시 리플리쉬토큰 처리방법?

답변 1

본문

api 서버(php) 개발중입니다.

app 개발자(외주) 와 협업을 하고있습니다.

 

앱에서 로그인시

서버api에서 토큰값을 넘겨주는것도 마무리가되고

토큰값이 유효함에 따라 app에서 서비스를 이용할수 있습니다.

 

 

근데 토큰 만료일이 존재하면 리플리쉬 토큰값도 같이 넘겨달라는 요청이 왔습니다.

토큰만료일을 길게 해서 리플리쉬토큰값과, 만료일을 같이 넘겨달라는데

api서버 입장에서는

이걸 어떻게 활용하는건지 모르겠습니다.

 

기존 토큰 재발급용이라 하는데. 어떤식으로  재발급을 해주는지요?

 

1. 로그인 성공시  토큰, 토큰만료일, 리플리쉬토큰 보낸다

2. app에서 요청이 올때마다  토큰유효성 검사후 필요정보를 리턴해준다.

 -   1) 토큰 유효성검사중.. 토큰 재발급을 어떻게???

이 질문에 댓글 쓰기 :

답변 1

리프레쉬 토큰의 사용방법이나 존재 의의에 대해선 개발자마다 다 다른 의견을 가지고 있는데
우선 리프레쉬토큰과 액세스 토큰의 경우
jwt의 경우 사용자에게 접근정보를 토큰형식으로 건네주고 있어 토큰값만 있다면 누구나 접근할 수 있습니다.
그리고 토큰값의 유효기간이 길다면 그만큼 해킹에 취약해집니다.
그래서 엑세스 토큰의 주기는 일반적으로 짧게(1시간~1일)정도로 발급하여 주고, 이 엑세스 토큰이 만료되면 리프레쉬 토큰을 활용해 다시 엑세스 토큰을 발급받는 형태입니다.

물론 리프레쉬토큰도 사용자에게 건네주는 정보이므로 두가지 다 탈취당하는 경우 큰 의미가 없다는 의견도 있습니다.
다만 api서버에서 세션이나 정보를 다 리셋하거나, api서버가 업데이트 되어 기존 접속 정보가 다 날라갈때, 리프레쉬 토큰이 있다면 사용자에게는 이러한 리셋으로 인한 재발급(실질적으로 서버에선 재발급을 하지만 사용자가 이러한 부분을 확인할 수 없음)을 할 필요가 없어지므로 이러한 용도에서도 쓰일 수 있으니 있어야 한다는 말도 있구요.

리프레쉬 토큰의 이유는 보안, 그리고 서버관리의 편이성 두가지 이유가 복합적으로 있다고 보시면 됩니다.

동작 원리는

기존 토큰이 만료되서 리프래쉬토큰을 보내면 새로 발행된 엑세스 토큰값을 보내주는형태입니다.

유효기간이 지났을때 기존의 엑세스토큰값과 리프레쉬토큰이 변조되었는지 확인하고, 변조되어있지 않다면 토큰을 발행해주고, 아니라면 발행해주지 않으면 됩니다.

상세한 답변 감사합니다. 제가 이해하고 있는부분을 정리해보겠습니다.

+ api서버 관점
로그인성공시 ( 일반토큰,토큰만료일, 리플리쉬토큰) 을 던저준다.

토큰 재발급 api가 또 필요하고.?? (별도 api가 필요한지?) 그안에서 역할은 아래와 같다

기존 리플리쉬 토큰값을 받아서
리플리쉬토큰값이 유효하면  기존 일반토큰을 다시 발행해준다( 최초 발행과 동일형태)


+ app 클라이언트 관점

일반토큰, 만료일, 리플리쉬토큰 3가지를 가지고
만료일이 지났을경우 서버단에 리플리쉬 토큰을 던저주고
만료일이 지나지 않았으면  일반토큰을 던저준다?


제가 이해를 정확히 한지 모르겠습니다.

저는 api 서버를 만드는 역할이라
리플리쉬 토큰을 가지고  일반토큰을 다시 발급해 주는 부분을 구성하면 되는걸로 이해했습니다.

그러면 ..!!
일반토큰을 발행해줄때  (일반토큰,만료일, 리플리쉬 토큰) 3가지를
또 재발급 해줘야하나요?

유효기간이 지났을때 기존의 엑세스토큰값과 리프레쉬토큰이 변조되었는지 확인하고, 변조되어있지 않다면 토큰을 발행해주고, 아니라면 발행해주지 않으면 됩니다

-->
 
유효기간이 지났을때 기존의 엑세스토큰값을 가지고 확인하려면
DB에 미리 담아놔야한다는 말씀인데 ( 유효기간 지나면 토큰은 사라지기에..)

DB 없이는 안되나요?  리플리쉬 토큰만 가지고 확인이 될거같기도 한데..

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 44
© SIRSOFT
현재 페이지 제일 처음으로