티스토리 뷰
JWT (JSON Web Token) 갱신 토큰을 이용한 인증 시스템에서 데이터베이스는 토큰의 유효성을 관리하고 보관하는 중요한 역할을 합니다. 데이터베이스를 이용하는 방식은 서버 측에서 토큰의 유효성을 검증하고, 필요에 따라 토큰을 무효화할 수 있게 해주는 강력한 방법입니다.
토큰의 생성과 저장
먼저, 사용자가 시스템에 로그인하면 서버는 JWT 토큰을 생성합니다. 이때 생성되는 토큰은 두 종류로, 하나는 짧은 유효 기간을 가진 액세스 토큰(access token)이고, 다른 하나는 긴 유효 기간을 가진 갱신 토큰(refresh token)입니다. 이 두 토큰 모두 클라이언트에게 전달되며, 클라이언트는 이를 저장하여 사용합니다.
하지만 이때 서버도 갱신 토큰에 대한 정보를 자신의 데이터베이스에 저장합니다. 보통은 갱신 토큰 자체 또는 그 해시 값을, 그리고 그 토큰이 어떤 사용자와 연결되어 있는지에 대한 정보를 함께 저장합니다. 이렇게 함으로써 서버는 각각의 갱신 토큰이 유효한지, 누구의 것인지를 추후에 판단할 수 있게 됩니다.
토큰의 갱신
액세스 토큰이 만료되면, 클라이언트는 이를 갱신해야 합니다. 이때 갱신 토큰이 사용됩니다. 클라이언트는 서버에게 자신이 가지고 있는 갱신 토큰을 전달하고 새로운 액세스 토큰을 요청합니다. 서버는 이 요청을 받으면, 먼저 데이터베이스를 조회하여 해당 갱신 토큰이 유효한지 확인합니다. 이때 갱신 토큰이 데이터베이스에 존재하고, 그 연결된 사용자 정보도 올바르다면 해당 갱신 토큰은 유효한 것으로 판단됩니다.
유효한 갱신 토큰이라면, 서버는 새로운 액세스 토큰을 생성하여 클라이언트에게 전달합니다. 이때, 필요에 따라 새로운 갱신 토큰도 함께 생성하여 전달할 수 있습니다. 만약 새 갱신 토큰이 생성된다면, 서버는 이전 갱신 토큰을 데이터베이스에서 삭제하고 새 갱신 토큰 정보를 저장합니다.
토큰의 무효화
서버가 갱신 토큰을 관리함으로써 얻는 또 다른 장점은 강제로 토큰을 무효화할 수 있다는 것입니다. 예를 들어, 사용자가 로그아웃을 하면 해당 사용자의 모든 갱신 토큰을 데이터베이스에서 삭제하면 됩니다. 이렇게 하면, 그 사용자의 갱신 토큰은 더 이상 유효하지 않게 되므로, 그 토큰을 이용한 액세스 토큰의 갱신 요청은 모두 거부되게 됩니다.
또한, 토큰이 탈취당했을 때나, 사용자 계정이 악용되었을 때 등의 보안 문제가 발생하면 관리자는 해당 사용자의 갱신 토큰을 즉시 데이터베이스에서 삭제하여 문제를 해결할 수 있습니다. 이는 토큰을 클라이언트 사이드에서만 관리하는 방식에서는 어려운 일입니다.
갱신 토큰을 데이터베이스에서 관리하는 방식은 보안성이 높으며, 유연한 인증 시스템 운영을 가능하게 합니다. 하지만 이 방식은 서버의 부하를 늘리며, 갱신 토큰을 관리하는 데 추가적인 로직이 필요합니다. 따라서 이 방식을 선택할지는 각각의 시스템의 요구사항과, 보안과 성능 사이에서 어떤 점을 더 중요하게 생각하는지에 따라 결정해야 합니다.
'개발' 카테고리의 다른 글
[개발]JWT 갱신 토큰 관리 방법(5)-블랙리스트 사용 (0) | 2023.07.03 |
---|---|
[개발]JWT갱신토큰 관리 방법(4)-DB사용 구현 (0) | 2023.07.03 |
[개발]JWT 갱신 토큰 관리 방법 (2) - 로컬스토리지/쿠키 사용 (0) | 2023.07.03 |
[개발]JWT 갱신 토큰 관리 방법(1) (0) | 2023.07.03 |
[개발]JWT를 이용한 사용자 갱신 및 관리 방법 (0) | 2023.07.03 |