-
JWT, Access Token, Refresh Token 알아보기카테고리 없음 2022. 5. 15. 19:39
토큰기반인증이란?
토큰은 사용자 인증을 위한 정보를 서명한 것으로, 토큰 기반 인증 방법은 토큰에 사용자 인증을 위한 정보가 담겨져 있기 때문에 서버에 사용자 정보를 서버에 저장하지 않고, 전달받은 토큰의 서명과 데이터를 검증하는 것만으로도 인증이 가능한 방식입니다.
JWT란?
JWT(JSON Web Token)은 현재 토큰 인증에서 가장 많이 사용되는 인터넷 표준으로 두 개체 사이에서 JSON 객체를 사용하여 정보를 안전하게 전달 할 수 있습니다. 주로 애플리케이션의 액세스 토큰을 만드는데 주로 사용됩니다.
JWT의 구조는 크게 3가지로 나뉩니다.
1 . Header : JWT 토큰 유형 해시 알고리즘
2. Payload : 클라이언트 정보
3. Signature : 서명 정보
Header는 보편적으로 토큰 타입을 명시하는 "typ"와 HMAC, SHA256등의 서명 알고리즘을 적는 "alg" 로 이루어져있습니다. Payload에는 토큰에 담을 데이터들이 들어있는데 이 때 데이터 하나를 JWT에서는 claim이라고 부릅니다. Signature부분은 보편적으로 헤더와 페이로드를 서명한 값입니다. 시크릿 키를 이용해 base74 url로 인코딩한 헤더와 페이로드를 헤더에 규정된 해싱알고리즘으로 서명합니다.
서버 측에서는 이 토큰을 받아서 시그니처를 복호화하여 디코딩하는 방식으로 유효한 토큰인지 확인할 수 있습니다.
기본적으로 토큰이 서버에 저장되지 않고 토큰의 서명을 이용해 검증을 하면 토큰이 만료될때까지 사용이 가능합니다. 따라서 별도의 토큰 파기 절차가 없는 경우가 있는데 토큰이 탈취되었을 경우에는 악의적으로 사용될 위험이 있습니다. 따라서 토큰을 파기할 수 있는 기능이 필요한데 이 때 사용되는 방식에는 Access Token, Refresh Token가 있습니다.
Access Token, Refresh Token란?
서버에 데이터를 요청할 때는 Access Token을 이용하며, 이 토큰의 유효 시간을 짧게 설정하여 탈취를 당해도 사용할 수 없도록 만듭니다. 유효 시간이 짧아 토큰이 만료되면, 클라이언트는 Refresh Token을 이용하여 서버에 새로운 Access Token을 요청하여 발급받습니다. Refresh Token은 Access Token 발급을 재발급하는 용도로 유효 시간이 깁니다.
기존의 세션 기반의 인증에 비교해 JWT만이 가지는 편리성 때문에 주목받고 있지만 JWT도 취약점이 존재하기 때문에 페이로드 내에 최소한의 정보를 담고, none 알고리즘을 이용한 서명 없는 토큰은 사용할 수 없게 해야 합니다. 그리고 복잡도 높은 비밀키를 사용해 토큰을 암호화하고, 유효 기간과 파기를 적절하게 적용해야 합니다!출처: