인증의 기초: 백엔드 개발자를 위한 완전 가이드
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
보안
대상자
- 백엔드 개발자
- 난이도: 중급~고급 (인증 메커니즘과 보안 실무 기술 포함)
핵심 요약
- 인증(Authentication)은 사용자의 정체를 확인하는 과정이며, 보안의 기초로 작용합니다.
- Stateful 인증은 서버가 세션 정보를 저장하고, Stateless 인증은 Bearer Token(예: JWT, PASETO)을 사용해 클라이언트가 증명합니다.
- Bearer Token은 HTTPS를 통해 전송되어야 하며, 짧은 유효 기간과 재발급 메커니즘이 필수적입니다.
섹션별 세부 요약
1. 인증의 중요성
- 인증은 데이터 유출과 해킹을 방지하는 핵심 기술입니다.
- 인증이 없으면 시스템의 모든 보안 조치가 무의미합니다.
- 인증은 사용자 정체 확인을 통해 접근 권한을 제어하는 기능입니다.
2. Stateful vs Stateless 인증
- Stateful: 서버가 세션 ID를 저장(예: Redis)하고, 클라이언트에 쿠키로 전달합니다.
- Stateless: 클라이언트가 Bearer Token(JWT, PASETO 등)을 저장하고, 요청 시 서버에 전달합니다.
- Stateless는 확장성과 스케일링에 유리하지만, 보안 리스크가 더 높습니다.
3. Bearer Token과 JWT
- Bearer Token은 Authorization 헤더를 통해 전달되며, HTTPS 전송이 필수입니다.
- JWT(JSON Web Token)은 자체적으로 클레임을 저장하고, 암호화 서명이 필요합니다.
- JWT는 Opaque Token(UUID, 해시)이나 Reference Token(OAuth2)이 아닌 경우에 사용됩니다.
4. PASETO와 Token Rotation
- PASETO는 보안성이 높은 대체 옵션으로, DPoP와 결합해 토큰 재사용 방지가 가능합니다.
- Access Token과 Refresh Token을 사용해 토큰 회전(Rotation)을 구현해야 합니다.
- Refresh Token은 HTTP-only 쿠키에 저장되어야 합니다.
5. 세션 해킹 방지
- Session Hijacking은 세션 ID 유출로 인해 발생하므로, 로그인 후 세션 ID 재생성이 필요합니다.
- Stateless 인증은 서버가 세션 정보를 저장하지 않기 때문에 해킹 위험이 더 높습니다.
6. 인가(Authorization)
- 인증 후, 사용자에게 허용되는 작업 범위를 제어하는 과정입니다.
- 예: 고객(Customer)은 상품 구매 가능, 판매자(Seller)는 상품 등록 가능.
- 역할 기반 접근 제어(Role-Based Access Control)가 일반적입니다.
7. 다른 인증 토큰 유형
- MAC Token: 요청에 타임스탬프와 URI를 포함해 서명합니다.
- DPoP: 토큰과 키를 결합해 재사용 방지.
- PKCE: 공개 클라이언트(모바일 앱)에서 인증 코드 도난 방지.
결론
- Stateless 인증은 스케일링과 현대 웹 앱에 적합하지만, Bearer Token의 보안과 토큰 회전(Refresh Token) 구현이 필수적입니다.
- JWT를 사용할 때는 HTTPS와 짧은 유효 기간을 적용하고, DPoP이나 PASETO로 보안 강화를 고려해야 합니다.