-
[스크랩/메모] 토큰, 엑세스토큰 리프레쉬 토큰스크랩과 메모 2022. 1. 16. 18:56
2. Access Token & Refresh Token란?
간단히 말해서 Access Token은 인증을 위한 JWT이면서, 동시에 보안을 위해 유효기간이 매우 짧다. 반면, Refresh Token은 유효기간이 짧은 Access Token을 보완하기 위한 JWT로서, Access Token에 비해 유효기간이 길다. Access Token과 Refresh Token, 그리고 기타 인증방식에 대해서 너무나도 깔끔하고 자세하게 포스팅한 글이 있어 여기에 링크를 남긴다
****************************
Access Token(JWT)를 통한 인증 방식의 문제는 만일 제 3자에게 탈취당할 경우 보안에 취약하다는 점입니다.유효기간이 짧은 Token의 경우 그만큼 사용자는 로그인을 자주 해서 새롭게 Token을 발급받아야 하므로 불편합니다. 그러나 유효기간을 늘리자면, 토큰을 탈취당했을 때 보안에 더 취약해지게 됩니다.
이때 “그러면 유효기간을 짧게 하면서 좋은 방법이 있지는 않을까?”라는 질문의 답이 바로 "Refresh Token"입니다.
Refresh Token은 Access Token과 똑같은 형태의 JWT입니다. 처음에 로그인을 완료했을 때 Access Token과 동시에 발급되는 Refresh Token은 긴 유효기간을 가지면서, Access Token이 만료됐을 때 새로 발급해주는 열쇠가 됩니다(여기서 만료라는 개념은 그냥 유효기간을 지났다는 의미입니다.)
사용 예를 간단히 들어보겠습니다. Refresh Token의 유효기간은 2주, Access Token의 유효기간은 1시간이라 하겠습니다. 사용자는 API 요청을 신나게 하다가 1시간이 지나게 되면, 가지고 있는 Access Token은 만료됩니다. 그러면 Refresh Token의 유효기간 전까지는 Access Token을 새롭게 발급받을 수 있습니다.
***************************
1) 로그인이 성공: JWT access token을 발급받는다.
2) 유저정보 요청: 받은 jwt token으로 다시 사용자 정보를 요청한다.
3) 받은 토큰은 로컬스토리지에 저장한다.
4) 유저 정보는 전역상태로 관리한다.
유저의 정보가 필요한 경우가 로그인 헤더에 사용자 정보를 표시해주는 것 외에 많지는 않았지만 이 때 JWT요청으로 받아온 사용자 정보를 전역상태로 저장해주어 필요할때 사용할 수 있었다. (당시에는 recoil로 관리하였다.)5) 토큰 유효기간 만료 시 처리
해당 token의 기간이 유효할 경우에만 해당 사이트에 접속이 가능한 상태다.
로그아웃처리가 되며 다시 재접속 하도록 화면을 리다이렉팅 시킨다.***************************
토큰 정보
토큰은 매번 인증을 거치지 않고도 일정 기간 카카오 API를 사용할 수 있도록 하는 권한 증명입니다. Kakao SDK는 토큰 관리 기능을 갖고 있습니다. REST API 사용 시에는 필요에 따라 토큰 정보 확인이나 갱신을 위한 요청을 해야 합니다.
토큰은 두 가지입니다. 보안상의 이유로 권한 증명 역할을 하는 액세스 토큰(Access Token)은 비교적 짧은 유효기간을 가지며, 일정 기간 동안 인증을 거치지 않고 액세스 토큰을 갱신할 수 있게 해주는 역할을 하는 리프레시 토큰(Refresh Token)은 보다 긴 유효기간을 가집니다.
토큰 유효기간은 플랫폼마다 다릅니다. 토큰의 역할과 유효기간을 표로 정리하면 다음과 같습니다.
Token TypeRoleValid
Access Token 사용자를 인증합니다. Android, iOS : 12시간
JavaScript: 2 시간
REST API : 6시간Refresh Token 일정 기간 동안 다시 인증 절차를 거치지 않고도 액세스 토큰 발급을 받을 수 있게 해 줍니다. 2달
유효기간 1달 남은 시점부터 갱신 가능**************************
사용자가 로그인에 성공하면 발급되는 액세스 토큰(Access Token)과 리프레시 토큰(Refresh Token)은 각각 역할과 유효기간이 다릅니다. 실제 사용자 인증을 맡는 액세스 토큰은 비교적 짧은 만료 시간을 가집니다. 하지만 유효한 리프레시 토큰이 있다면, 사용자가 다시 로그인했을 때 리프레시 토큰으로 액세스 토큰을 다시 발급받을 수 있습니다. 각 토큰의 유효기간은 이해하기 > 토큰 정보를 참고합니다.
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
https://developers.kakao.com/docs/latest/ko/kakaologin/common#token
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
로그인 토큰 저장과 사용자 정보 관리에 대한 생각
로그인 성공 시 받아온 토큰을 어디에 저장할까?우선 정해진 답은 없다. 보안의 정도와 서비스 기획 방식에 따라 달라질 것이다.토큰의 저장위치는 쿠키 vs 로컬스토리지/세션 스토리지 두 경우
velog.io
https://donologue.tistory.com/397
Access Token + Refresh Token JWT 인증
Refresh token 사용 이유 Access Token(JWT)를 통한 인증 방식의 문제 제 3자에게 탈취당할 경우 보안에 취약하다는 점입니다. 유효기간이 짧은 Token의 경우 그만큼 사용자는 로그인을 자주 해서 새롭게 To
donologue.tistory.com
https://tansfil.tistory.com/59
쉽게 알아보는 서버 인증 2편(Access Token + Refresh Token)
안녕하세요! 이전 포스팅에는 크게 세션/쿠키 인증, 토큰 기반 인증(대표적으로 JWT)에 대하여 알아보았습니다. 저희가 앱, 웹 혹은 서버 개발을 하면서 꼭 사용하게 되는 인증(Authorization)은 아주
tansfil.tistory.com
[Node.js] JWT: Access Token & Refresh Token 인증 구현
JWT 플로우를 작성하면서 access 토큰과 refresh 토큰에 대한 구현에 대한 많은 고민이 있었다. 좋은 글들이 많았고 이런 저런 방법을 고민하던 중, 내가 구현한 코드를 정리하고자 포스팅하게 되었
cotak.tistory.com
💻 Refresh Token이란
Resource Server(Resource Server + Authorization Server)에서 발급받은 Access Token은 수명이 있습니다. 제 3자에게 탈취당할 경우 보안에 취약하다는 점 때문에 수명이 있지만, 이 유효기간이 짧다면 그만큼 사용자는 로그인을 자주 해서 새롭게 토큰을 발급받아야 하므로 불편합니다. 또한 유효기간을 늘리면 토큰을 탈취당했을 때 보안에 더 취약해집니다.
그래서 등장한 것이 Refresh Token입니다. access token의 유효기간을 짧게하여 보안도 높이고, 편의성도 챙기는 방법입니다.
Refresh Token은 Access Token과 똑같은 형태의 JWT입니다. 처음에 로그인을 완료했을 때 Access Token과 동시에 발급되는 Refresh Token은 긴 유효기간을 가지면서, Access Token이 만료됐을 때 새로 발급해주는 열쇠가 됩니다.
'스크랩과 메모' 카테고리의 다른 글
[스크랩] 데이터베이스 인덱싱 (0) 2022.02.06