api 구현중 jwt 토큰 발생시 리플리쉬토큰 처리방법?
본문
api 서버(php) 개발중입니다.
app 개발자(외주) 와 협업을 하고있습니다.
앱에서 로그인시
서버api에서 토큰값을 넘겨주는것도 마무리가되고
토큰값이 유효함에 따라 app에서 서비스를 이용할수 있습니다.
근데 토큰 만료일이 존재하면 리플리쉬 토큰값도 같이 넘겨달라는 요청이 왔습니다.
토큰만료일을 길게 해서 리플리쉬토큰값과, 만료일을 같이 넘겨달라는데
api서버 입장에서는
이걸 어떻게 활용하는건지 모르겠습니다.
기존 토큰 재발급용이라 하는데. 어떤식으로 재발급을 해주는지요?
1. 로그인 성공시 토큰, 토큰만료일, 리플리쉬토큰 보낸다
2. app에서 요청이 올때마다 토큰유효성 검사후 필요정보를 리턴해준다.
- 1) 토큰 유효성검사중.. 토큰 재발급을 어떻게???
답변 1
리프레쉬 토큰의 사용방법이나 존재 의의에 대해선 개발자마다 다 다른 의견을 가지고 있는데
우선 리프레쉬토큰과 액세스 토큰의 경우
jwt의 경우 사용자에게 접근정보를 토큰형식으로 건네주고 있어 토큰값만 있다면 누구나 접근할 수 있습니다.
그리고 토큰값의 유효기간이 길다면 그만큼 해킹에 취약해집니다.
그래서 엑세스 토큰의 주기는 일반적으로 짧게(1시간~1일)정도로 발급하여 주고, 이 엑세스 토큰이 만료되면 리프레쉬 토큰을 활용해 다시 엑세스 토큰을 발급받는 형태입니다.
물론 리프레쉬토큰도 사용자에게 건네주는 정보이므로 두가지 다 탈취당하는 경우 큰 의미가 없다는 의견도 있습니다.
다만 api서버에서 세션이나 정보를 다 리셋하거나, api서버가 업데이트 되어 기존 접속 정보가 다 날라갈때, 리프레쉬 토큰이 있다면 사용자에게는 이러한 리셋으로 인한 재발급(실질적으로 서버에선 재발급을 하지만 사용자가 이러한 부분을 확인할 수 없음)을 할 필요가 없어지므로 이러한 용도에서도 쓰일 수 있으니 있어야 한다는 말도 있구요.
리프레쉬 토큰의 이유는 보안, 그리고 서버관리의 편이성 두가지 이유가 복합적으로 있다고 보시면 됩니다.
동작 원리는
기존 토큰이 만료되서 리프래쉬토큰을 보내면 새로 발행된 엑세스 토큰값을 보내주는형태입니다.
유효기간이 지났을때 기존의 엑세스토큰값과 리프레쉬토큰이 변조되었는지 확인하고, 변조되어있지 않다면 토큰을 발행해주고, 아니라면 발행해주지 않으면 됩니다.