How to implement authentication in Next.js
개요
https://nextjs.org/docs/app/guides/authentication
- Authentication vs Authorization: 누구인지 확인하는 '인증'과 무엇을 할 수 있는지 결정하는 '권한 부여'의 차이점을 설명합니다.
- Authentication: 사용자가 누구인지 확인 (예: 로그인)
- Authorization: 사용자가 접근할 수 있는 리소스 확인 (예: 보호된 페이지 접근 제어)
인증 방식
인증 방식은 단순한 '로그인'을 넘어, 서비스의 확장성, 보안 요구 수준, 사용자 편의성에 따라 적절한 아키텍처를 선택하는 것이 중요
웹의 기초 및 전통적 방식
- HTTP Basic Authentication
- 동작:
ID:Password를 Base64로 인코딩하여 헤더(Authorization)에 담아 전송.
- 특징: 가장 단순하지만 보안에 취약함. 반드시 HTTPS가 강제되어야 함.
- Cookie / Session Based
- 동작: 서버 DB/메모리에 세션 생성 → 브라우저에 Session ID(쿠키) 전달 → 이후 요청마다 쿠키 자동 포함.
- 특징: 서버가 상태를 관리(Stateful). 보안 제어가 직관적이나 서버 확장(Scaling) 시 세션 동기화 비용이 발생함.
현대적인 Stateless 방식
- Token Based (JWT 등)
- 동작: 로그인 성공 시 유저 정보를 담은 서명된 토큰 발급 → 클라이언트가 저장 후 헤더에 담아 전송.
- 특징: 서버가 상태를 저장하지 않음(Stateless). 모바일 앱이나 마이크로서비스(MSA) 환경에 최적화됨.
권한 위임 및 통합 인증 (SSO)
- Third-Party Access (OAuth 2.0)
- 동작: 제3자(Google 등)로부터 권한을 위임받아 Access Token 발급 → 타 서비스 자원 접근.
- 특징: 비밀번호 공유 없이 특정 권한(Scope)만 안전하게 사용.
- OpenID Connect (OIDC)
- 동작: OAuth 2.0 위에서 동작하는 신원 확인(Identity) 계층.
ID Token을 통해 유저가 누구인지 확인.
- 특징: 현대적인 "소셜 로그인"의 표준 규격.
- SAML (Security Assertion Markup Language)
- 동작: XML 기반 데이터 교환. 기업 내 여러 솔루션을 하나로 묶는 SSO 구현에 사용.
- 특징: 엔터프라이즈 환경(ERP, 사내 인트라넷 등)의 핵심 표준.
보안 강화 기술
- OTP & MFA (Multi-Factor Authentication)
- 동작: 지식(PW) + 소유(폰, OTP) + 생체(지문) 중 2단계 이상 결합.
- 특징: 비밀번호가 유출되어도 물리적 장치 없이는 로그인이 불가능하게 방어.