JWT와 Refresh Token

IMKUNYOUNG·2023년 6월 27일
0
post-thumbnail

오늘 이 글에서는 애플리케이션의 보안을 강화하는 데 중요한 요소인 JWT(Jason Web Tokens)와 Refresh Token에 대해 깊이있게 이야기해볼 예정입니다.

JWT (JSON Web Tokens)란?

JWT는 웹표준(RFC 7519)으로서 두 개체에서 JSON 객체를 안전하게 정보를 전송하기 위한 간편한 방법입니다. JWT는 디지털 서명이 가능하기 때문에, 보낸 사람이 누구인지, 보낸 내용이 변조되지 않았는지를 검증할 수 있습니다.

JWT는 다음과 같이 세 부분으로 구성되어 있습니다:
1. Header: 토큰의 유형과 해싱 알고리즘 정보를 포함합니다.
2. Payload: 여러가지 클레임(즉, 토큰이 담고 있는 정보)를 포함합니다.
3. Signature: Header와 Payload를 이용하여 생성된 서명입니다.

이 세 부분은 각각 base64Url 방식으로 인코딩되며, 각 부분은 점(.)으로 연결됩니다.

JWT의 문제점과 Refresh Token이 필요한 이유

그런데 JWT는 상태를 저장하지 않는다는 Stateless한 특징이 있습니다. 따라서 일단 JWT가 발급되면 만료 시간이 되기 전까지는 해당 토큰을 사용하는 사용자를 신뢰할 수 밖에 없습니다. 이러한 상황에서 문제가 발생하게 되면, 예를 들어 사용자가 불량한 행동을 하거나 토큰이 탈취당한 경우, JWT는 그것을 즉시 반영하지 못하고 토큰의 만료 시간이 될 때까지 기다려야 합니다.

이런 문제를 해결하기 위해 등장한 것이 Refresh Token입니다. Refresh Token은 사용자가 로그인을 유지할 수 있게 하는 동시에, 보안 문제를 해결하는 방법입니다. Refresh Token은 보통 긴 유효 기간을 가지며, 이를 사용하여 새로운 Access Token(JWT)를 발급받을 수 있습니다.

Refresh Token의 동작 방식

로그인 시, 사용자에게 Access Token과 함께 Refresh Token이 발급됩니다. Access Token은 짧은 유효 기간을 가지고 있어 자주 만료되지만, Refresh Token은 상대적으로 긴 유효 기간을 가지고 있어 자주 만료되지 않습니다.

사용자가 서비스를 이용하면서 Access Token이 만료되면, 서버는 새로운 Access Token을 요청하도록 응답합니다. 이때 사용자(혹은 사용자를 대행하는 클라이언트 애플리케이션)는 Refresh Token을 서버에 보내 새로운 Access Token을 받습니다.

여기서 중요한 점은, Refresh Token은 항상 보안된 채널을 통해서만 전송되어야 하며, 서버는 Refresh Token이 유효한지 항상 확인해야 합니다. 이 방식을 통해, 짧은 유효 기간의 Access Token으로 인해 발생하는 불편함을 최소화하고 보안을 유지할 수 있습니다.

결론

JWT와 Refresh Token을 사용하면 상태를 저장하지 않고도 사용자 인증 정보를 안전하게 관리할 수 있습니다. 이 기술을 올바르게 사용하기 위해서는 JWT의 특성과 사용법, 그리고 Refresh Token의 동작 원리를 잘 이해하고 있어야 합니다.

0개의 댓글

관련 채용 정보