액세스 토큰 (Access Token)
액세스 토큰은 사용자가 로그인을 완료했을 때 발급되며, 짧은 시간 동안 유효하다. API 요청 시 권한을 확인하는 용도로 사용되며, 보통 사용자가 인증이 필요한 페이지에 접근할 때마다 서버에 전달된다. 토큰이 짧은 유효 기간을 가지기 때문에 만약 유출되더라도 짧은 시간 내에 사용할 수밖에 없어 보안에 유리하다.
리프레시 토큰 (Refresh Token)
리프레시 토큰은 액세스 토큰의 유효 기간이 만료되었을 때 새로운 액세스 토큰을 발급받기 위해 사용된다. 일반적으로 더 긴 유효 기간을 가지며, 서버에서 유효성을 확인한 후에만 액세스 토큰을 재발급하는 데 사용된다. 리프레시 토큰이 유출될 경우 보안 위험이 있기 때문에, 서버는 추가적인 보안 검증을 통해 리프레시 토큰을 보호하는 것이 중요하다.
쿠키 (Cookies)
쿠키는 웹 브라우저에 저장되는 작은 데이터 조각. 쿠키는 서버가 아닌 클라이언트 측에서 관리되며, 주로 사용자의 설정이나 인증 정보를 저장한다. 예를 들어, 자동 로그인 기능, 장바구니 정보 등을 쿠키로 관리할 수 있다.
세션 (Session)
세션은 서버에 저장된 사용자와의 연결 정보. 사용자가 로그인하면 서버는 고유한 세션 ID를 생성하여 사용자에게 부여하고, 해당 ID를 통해 사용자의 상태를 추적한다. 세션은 보통 일정 시간 동안 유지되며, 일정 시간 동안 활동이 없으면 자동으로 만료된다.
토큰 (Tokens)
토큰은 인증 정보나 권한을 포함한 데이터 덩어리로, 보통 JSON Web Token (JWT) 형태로 사용된다. JWT는 사용자 정보를 담고 있으며, 서버와 클라이언트 간에 데이터를 주고받을 때 자주 사용된다. 토큰은 쿠키나 로컬 스토리지 등에 저장하여 사용한다.
토큰을 저장하는 위치는 보안상 매우 중요하다. 잘못된 위치에 저장하면 보안 취약점을 노출할 수 있다.
액세스 토큰
액세스 토큰은 브라우저의 메모리, 즉 상태 관리 라이브러리, 컴포넌트 상태 등에서 관리하는 것이 일반적이다. 만약 HTTP 요청마다 필요한 경우 HTTP 헤더에 포함하여 보내되, 저장 위치를 로컬 스토리지나 세션 스토리지로 사용하는 경우도 있다.
리프레시 토큰
리프레시 토큰은 유효 기간이 길고, 액세스 토큰 재발급에 사용되므로 보안이 더욱 중요하다. 서버의 쿠키를 통해 HttpOnly 쿠키로 설정하는 방법이 가장 안전하며, 이 쿠키 설정은 JavaScript로 접근할 수 없으므로 크로스 사이트 스크립팅(XSS) 공격에 안전하다.