웹 보안 및 인증 심층 분석 - JWT, Cookie, Refresh Token, Protected Route, OAuth 2.0
웹 보안 및 인증 심층 분석: JWT, Cookie, Refresh Token, Protected Route, OAuth 2.0
웹 애플리케이션 개발에 있어 사용자 인증과 데이터 보안은 핵심적인 고려 사항입니다. 오늘은 웹 환경에서 자주 사용되는 주요 보안 및 인증 기술인 JWT, Cookie, Refresh Token, Protected Route, 그리고 OAuth 2.0에 대해 깊이 있게 알아보겠습니다.
1. JWT (Json Web Token) 란 무엇인가? 🔐
JWT는 JSON 형식의 데이터를 안전하게 전송하기 위한 표준입니다. 서버는 사용자가 로그인하면 JWT를 생성하여 클라이언트에 전달하고, 클라이언트는 이 토큰을 API 요청 시 첨부하여 인증된 사용자임을 증명합니다.
용도
- 인증 (Authentication): 로그인 후 서버가 발급한 JWT를 사용해 본인 신원 증명.
- 정보 교환 (Information Exchange): 사용자 정보 등 필요한 데이터를 안전하게 담아 전달.
2. Cookie 🍪
쿠키는 웹사이트가 사용자의 컴퓨터에 저장하는 작은 데이터 조각입니다. 웹 브라우저가 특정 웹사이트에 접속할 때마다 서버로 전송되어 사용자 상태를 유지하는 데 사용됩니다.
쿠키의 구성 요소
- 이름(Name)과 값(Value): 핵심 데이터.
- 도메인(Domain)과 경로(Path): 쿠키가 유효한 범위 지정.
- 만료 시간(Expires) 및 최대 수명(Max-Age): 쿠키 유효 기간 설정.
- 보안 속성:
- Secure: HTTPS 연결에서만 전송.
- HttpOnly: 클라이언트 스크립트 접근 방지 (XSS 공격 완화).
- SameSite: 크로스 사이트 요청에 쿠키 포함 방식 제어 (CSRF 공격 방지).
쿠키의 동작 원리
- 설정: 서버가 HTTP 응답 헤더의
Set-Cookie필드를 통해 쿠키를 브라우저에 설정. - 저장: 브라우저는 서버로부터 받은 쿠키를 저장하고, 지정된 도메인/경로에 따라 관리.
- 전송: 같은 도메인으로 요청 시 브라우저는 해당 쿠키를 HTTP 요청 헤더의
Cookie필드를 통해 자동 전송.
보안 고려 사항
- XSS 공격 방지를 위해
HttpOnly옵션 사용. - CSRF 공격 방지를 위해
SameSite옵션 설정. Secure옵션 및 HTTPS 사용을 통해 쿠키 도난 방지.
3. Refresh Token 🔄
Access Token은 보호된 리소스 접근에 사용되지만 만료 시간이 짧습니다. Refresh Token은 유효 기간이 길며, 만료된 Access Token을 갱신하는 데 사용됩니다.
Refresh Token 동작 원리
- 초기 발급: 인증 완료 시 인가 서버가 Access Token과 Refresh Token을 함께 발급.
- 토큰 저장: 클라이언트는 두 토큰을 안전하게 저장.
- Access Token 만료: Access Token 만료 시, 클라이언트가 Refresh Token으로 새 Access Token 요청.
- 토큰 갱신: 인가 서버가 Refresh Token 유효성 검증 후 새 Access Token 발급.
보안 고려 사항
HttpOnly 쿠키나 보안 스토리지에 저장하여 XSS/CSRF 공격 방지.- 적절한 만료 시간 설정.
- 로그아웃 또는 의심스러운 활동 감지 시 즉시 폐기.
4. Protected Route (보호된 라우트) 🎶
Protected Route는 인증 상태에 따라 특정 라우트(경로)에 대한 접근을 제어하는 컴포넌트입니다. 사용자 데이터 보호 및 민감 정보 접근 제한이 목적입니다.
동작 원리
- 인증 확인: 사용자 인증 상태 확인.
- 조건 분기:
- 인증된 사용자: 요청한 컴포넌트 렌더링.
- 인증되지 않은 사용자: 로그인 페이지 등으로 리다이렉션.
- 리다이렉션 처리: 필요한 경우 리다이렉션 수행.
5. OAuth 2.0 🤝
OAuth 2.0은 사용자가 자신의 리소스(예: 프로필, 이메일)를 제3자 애플리케이션과 안전하고 제한적으로 공유할 수 있도록 권한을 위임하는 프로토콜입니다.
주요 구성 요소
- 리소스 소유자 (Resource Owner): 자신의 데이터에 접근 권한을 부여하는 사용자.
- 클라이언트 (Client): 리소스 소유자의 리소스에 접근하려는 애플리케이션.
- 리소스 서버 (Resource Server): 보호된 리소스를 호스팅하는 서버.
- 인가 서버 (Authorization Server): 클라이언트에 Access Token을 발급하고 권한 부여를 관리하는 서버.
OAuth 2.0 인증 및 권한 부여 프로세스
- 사용자 인증 및 권한 부여 요청: 클라이언트가 리소스 소유자에게 리소스 접근 권한 요청.
- 인가 코드 발급 (Authorization Code Grant): 인가 서버가 클라이언트에 인가 코드 발급.
- 액세스 토큰 발급: 클라이언트가 인가 코드로 인가 서버에 Access Token 요청.
- 리소스 접근: 클라이언트가 Access Token을 사용하여 리소스 서버의 보호된 리소스에 접근.
OAuth 2.0의 인증 방식 (Grant Types)
- Authorization Code Grant
- Implicit Grant
- Resource Owner Password Credentials Grant
- Client Credentials Grant
- Refresh Token
웹 개발에서 이 모든 개념들을 이해하고 적용하는 것은 안전하고 신뢰할 수 있는 서비스를 구축하는 데 필수적입니다. 이 글이 웹 보안과 인증에 대한 여러분의 이해를 돕는 데 기여했기를 바랍니다. 다음 포스팅에서도 유익한 정보로 찾아뵙겠습니다.
💬 댓글