![[Security/JWT] Access & Refresh Token + 피해 최소화](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FA8zjO%2FbtsIigtNyLk%2FAAAAAAAAAAAAAAAAAAAAAFSSamBQEgKORCgiwe-KQVQubAdmyhx4jjHmp3yaJ0Jj%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DHXcoJE3Tv7Ep%252B3vBE6pP2Wci0CA%253D)
Access Token과 Refresh Token을 왜 따로 사용하는지 알아보자
https://naturecancoding.tistory.com/110
[Spring/Security] JWT 생성, 검증 JwtTokenizer 만들기 (JWT Spring에서 사용하기 1)
JWT를 Spring에서 어떻게 사용하는지 알아보자일단 JwtTokenizer클래스를 만들고 @Component를 사용해서 빈으로 등록하자메소드를 중심으로 설명해 보겠다.https://naturecancoding.tistory.com/109 [Security/JWT] JWT
naturecancoding.tistory.com
기초 지식은 여기서 탐구하자
저번 시간에 토큰은 탈취됐을 때가 문제라서 유효기간을 둔다는 것을 설명했다. 이로인해서 유효기간이 짧은 Access로 통신을 하고, Refresh로 재발급을 하는데 Refresh가 탈취당하는걸 보안하기 위한 것 까지 알아보자
Refresh Token이 필요한 이유
어차피 사용자에게 Refresh & Access 토큰을 둘다 넘겨준다면 Access만 사용해도 되는 거 아냐? 라는 질문에서 시작된다.
결론은 피해를 최소화 하기 위해서 그리고 사용자 경험을 좀더 좋게 하기 위해서 이다.
Access Token의 생명주기는 짧다. 따라서 토큰을 탈취당해도 공격자가 사용할 수 있는 시간이 적으니 피해를 적게 볼 수 있다.
이제 Access Token이 만료됐을 때를 보자
- client가 Access Token으로 요청을 보내도 유효하지 않음으로 401 (Unauthorized)에러를 받는다.
- client는 헤더에 Access Token 대신에 Refresh Token을 넣어서 요청한다.
- server는 Refresh Token을 확인하고 새로운 Access Token을 넣어서 사용자에게 보내준다.
- 만약 2번에서 Refersh Token도 만료 되었다면 401에러를 다시 받아서 다시 발급 받야야한다.
이때의 장점을 뭘까 Refersh Token을 사용함으로써 로그인을 자주 안해도 되서 사용자 편의성이 올라가게 되고 Access Token으로만 서비스를 이용할 수 있어 피해를 최소화 할 수 있다.
근데 단점도 있다.
Refresh Token이 탈취당한다면?
Refresh Token은 Access Token에 비하면 유효기간이 끝났을 때만 통신하게 되니 비교적 통신 빈도가 적다.
하지만 이것이 통신을 아예 안하는 것은 아니니 탈취의 위험또한 남아 있고 Refresh는 한번 탈취되면 오래동안 생성되니 위험하다. 따라서 다음 방법들을 사용한다.
- Refresh Token Rotation
클라이언트가 Access Token을 갱신할 때마다 새로운 Refresh Token을 발급한다.
이로인해서 탈취된 Refesh Token이 무효화 돼어 피해를 줄인다.
위 사진을 보면 Refresh Token이 AccessToken이 재발급 될때 마다 다시 발급되는 걸 볼 수 있다. - IP 및 기기 검증
만약 Refresh Token이 새로운 IP주소나 기기에서 사용된다면 추가 인증을 요구하거나 알림을 전송한다. - TLS
HTTPS를 사용해서 토큰이 암호화 된 채로 전송되도록 해 네트워크에서 Refresh Token이 탈취되는 것 을 막는다.
'Web Security > JWT' 카테고리의 다른 글
[Security/JWT] JWT 기초 (0) | 2024.07.01 |
---|