반응형
Access token 과 Refresh token 에 대해 공부를 하려면 우선 JWT의 개념부터 명확하게 잡고가야한다.
JWT(access token)란?
JWT는 Json Web Token의 약자로 말 그대로 웹에서 사용하는 JSON형식의 토큰에 대한 표준 규격을 말한다.
주로 사용자의 인증 정보를 서버와 클라이언트간에 안전하게 주고받기 위해 사용하는데 구조와 장점 단점만 빠르게 짚고 넘어가보자
- 구조
- header.payload.signature의 구조로 이루어져 있음
- 각 부분은 .(dot)으로 구분되어있음
- header: 알고리즘과 토큰의 타입이 명시되어있음
- payload: 전달하려는 데이터(claim)를 포함하고 있음
- signature: header와 payload의 비밀키를 담고있음
- base64로 인코딩되어있음
- 장점
- 데이터 위변조를 막을 수 있다
- 세션과 달리 인증정보에 대한 별도의 저장소가 필요없다
- 토큰에 대한 정보를 자체적으로 지니고있어 다른 시스템에서 접근 및 공유가 용이하다
- 쿠키를 사용하지 않으므로 CORS문제에서 자유로워 질 수 있다
- 단점
- 토큰의 길이가 길어 인증요청이 많아질수록 서버에 부하가 걸릴 수 있다
- 토큰을 탈취당하면 대처하기 어렵다(보안이 취약함)
JWT의 구조와 장단점을 알아보았으니 단점을 보완할 수 있는 Access token 과 Refresh token에 대해서 공부해보자
Refresh token이란?
JWT(access token)을 통한 인증방식의 문제는 위에서 말했듯이 토큰이 탈취당했을 때 대처가 어렵다는 점이다.
이를 해결하기 위해서는 token의 유효기간을 짧게 만들어서 사용해야하는데
이러면 사용자가 로그인을 자주해야한다는 단점이 또 생기게 된다.
그래서 등장한 방법이 유효기간을 짧게 하면서 사용자를 귀찮게 하지 않게하는 Refresh token방식이다.
Refresh token은 Access token과 똑같은 형태의 JWT인데 유효기간을 아주 길게 설정해둔다는 차이가 있다. 작동 방식은 아래에서 더 자세히 알아보자
Access token/Refresh token 작동 원리
- 유저가 로그인 시도를 함
- 서버가 DB에서 유저에 대한 정보를 가져옴
- 로그인 완료 / Access token(유효기간 10분), Refresh token(유효기간 2주) 발급 >> 유효기간은 설정하기에 따라 다름
- Refresh token DB에 저장
- 사용자는 Access token을 헤더에 실어서 원하는 데이터를 요청하고 받아올 수 있다.
- Access token 만료됨
- 사용자는 Refresh token과 Access token을 함께 서버로 보내면서 데이터 요청을 함
- 서버는 사용자가 보낸 Refresh token과 DB에 저장되어있는 Refresh token을 비교
- Refresh token이 동일하고 유효기간이 지나지 않았다면 새로운 Access token 발급
- 서버는 새로운 Access token을 헤더에 실어 API 요청 진행
이렇게 하면 기존방식보다 안전하게 데이터를 주고받을 수 있다.
하지만 구현이 복잡해지고 새롭게 token을 발급하는 과정에서 자원이 많이 소모될 수 있다는 단점이 있다.
반응형
'웹개발' 카테고리의 다른 글
세션 로그인, jwt 로그인 정 (0) | 2024.01.07 |
---|---|
동기식 프로그램 비동기식 프로그램 ,블럭 논블럭 비교 (4) | 2023.12.03 |