access token & refresh token

hyunjung Koo·2024년 4월 7일
0

WIL

목록 보기
3/3
post-thumbnail

흔하게 쓰이는 Access Token & Refresh Token.
요즘 프로젝트에서 지겹게 보고 있는 것들이다.

사용만 하고 스쳐지나가는 인연이 되지 않도록

  • 인증 인가
  • JWT(cookie > session > JWT)
  • Access Token & Refresh Token

간단하게 개념을 정리해보고자 한다.

Authentication & Authorization

인증 인가에 대한 개념은 커머스 서비스를 하고 있는 사람이라면 지겹게 들었을 것이고. 아니라도 익숙한 단어일 것이다.

인증(Authentication)
개체 신원 증명 과정이다.
어떠한 주권을 행사할 자격이 있는지를 검증하는 단계로
개체는 시스템간 공유되는 합의된 정보 제공하여 자신을 증명한다.

인가(Authorization)
승인이라고도 불리는데, 접근 권한을 확인하는 행위이다.
인가를 받은 개체는 새로운 자격을 얻게 되어 제한된 리소스에 접근, 제한된 행동이 가능해 진다.

인증 인가는 서비스 사용자가 누구인지 데이터 추적, 신원 확인 필요성으로 인해 만들어 졌으며, 흔하게 알고있는 ID/PW 로그인 기능이다.

JWT(Json Web Token)

HTTP 인터넷 상에서 데이터를 주고 받기 위한 서버, 클라이언트 모델을 따르는 프로토콜.
HTTP의 특징으로는 비연결성(Connectionless), 무상태(Stateless)가 있는데, 데이터를 교환 행위(요청-응답) 처리하고 나면 연결을 끊어 버린다는 것이다. 불필요한 자원 낭비를 줄인다는 점에서 장점이지만 서버는 클라이언트를 식별할 수 없다는 단점이 있다. 이를 보완하기 위해 나온 기술이 cookie와 session 이다.

인증을 위한 cookie, session
cookie는 상태 정보를 클라이언트의 PC에 저장하는데 사이즈 제한(4KB)과 민감정보가 그대로 노출되는 단점이 있었다. 이를 보완하기 위해 나온 session.
session은 민감한 정보들을 클라이언트가 아닌 서버에 저장하고 관리한다. session 단점은 데이터를 교환하는 도중에 탈취 당하면 그대로 민감한 정보가 드러난다는 것이었고, 해커가 클라이언트인 척 할 수 있다는 한계가 있다.

cookie는와 session 취약점을 보완하기 위해 나온 기술이 바로 JWT.

JWT 이란?
인증 구조는 크게 다르지 않지만 서명된 토큰을 사용한다는 점이 큰 차이점이다. (공개키-개인키)를 한쌍으로 사용하여 토큰에 서명할 경우 서명된 토큰은 개인키를 보유한 서버가 정상 토큰인지 식별 가능하다.

JWT 구조
크게 헤더(Header) 페이로드(Payload) 서명(Signatrue) 구성된다.
헤더(Header) : 토큰의 타입과 해싱 알고리즘 정보
페이로드(Payload) : 사용자의 인증 정보와 권한
서명(Signatrue) : 헤더와 페이로드를 합친 후 비밀키로 해싱하여 생성

서버는 클리이언트로부터 전달받은 JWT 검증하기 위해 서명 부분을 해싱 알고리즘과 비밀키로 다시 생성하고, 클라이언트가 전달한 서명과 비교하고, 일치하면 인증이 유효한 것으로 간주한다.

서명 부분이 토큰의 무결성과 인증 정보의 보안을 보장한다.

JWT 한계가 있었으니..
1. 한 번 발급되면 유효기간 만료될때까지 계속 사용 가능하여 중간 삭제가 불가능하다.
2. payload 정보는 디코딩하면 누구나 접근 가능하기에 페이로드에 중요 정보를 저장할 수 없다.
3. JWT 길이가 길기에 인증 요청이 많아지면 서버 자원 낭비가 발생하는 단점이 있다.

Access Token & Refresh Token

마지막으로
JWT 단점을 보완한 인증 강화 버전 Access Token & Refresh Token 방식을 알아보자.

Access Token 만 사용하던 JWT 방식은 Stateless 이기에 서버에서 상태를 관리하지 않는다. 다시 말해 액세스 토큰으로 사용자 검증을 진행하면 서버에서 토큰 상태를 제어할 수 없다. 오직 토큰 자체로 검증하며 권한 인증하기에 중간에 제3자에게 탈취되면 보안에 취약하다는 단점이 있다.

JWT 발급 후 삭제가 불가능함으로 토큰에 유효기간을 부여하여 이 문제를 대응할 수 있다. 하지만 너무 짧은 유효기간(Access token 유효기간 보통 1시간)은 자주 로그인하는 번거로움으로 사용자 경험에 안 좋다.

이를 해결하기 위한 Refresh Token
Refresh Token은 Access Token과 같은 형태인 JWT이다.
Refresh Token은 Access Token보다 긴 유효기간을 가지고, Access Token이 만료됐을 때 새로 발급해주는 열쇠로 작용한다.

보통 Access token 토큰은 1시간 간격으로 만료하여 안정성을 높이고, Refresh Token 으로 Access token 새롭게 발급 받아 접근 권한을 안전하게 유지한다. Refresh Token 유효 기간(60일)까지 만료되면 사용자는 다시 로그인 절차를 밟게 된다.


Oauth2.0 배경, 개념, 동작 원리에 대해 잘 설명한 글이 있어
참고문에 추가하였습니다.

참고

profile
날마다 꾸준히 성장하는 Software Engineer

0개의 댓글