Authentication (Auth)
1. 개요
Authentication은 사용자가 자신이 누구인지 증명하는 과정입니다. 웹 애플리케이션에서 매우 중요한 보안 개념으로, 주로 사용자 로그인, 회원가입 등을 통해 이루어집니다. 인증은 인증된 사용자만이 애플리케이션의 민감한 데이터나 기능에 접근할 수 있도록 하는 첫 번째 방어선입니다.
2. 인증의 종류
인증은 다양한 방식으로 이루어질 수 있으며, 가장 일반적인 방식은 다음과 같습니다:
2.1. 아이디/비밀번호 인증
- 설명: 사용자가 자신을 증명하기 위해 아이디와 비밀번호를 입력하는 방식.
- 장점: 가장 보편적이고 간단한 방식.
- 단점: 비밀번호 유출 시 보안 취약.
2.2. OAuth (Open Authorization)
- 설명: 외부 서비스(Google, Facebook 등)를 통해 인증하는 방식.
- 장점: 사용자가 비밀번호를 기억할 필요 없이, 외부 계정을 이용해 쉽게 로그인 가능.
- 단점: 제3자 서비스에 의존적.
2.3. Two-Factor Authentication (2FA)
- 설명: 두 가지 인증 요소를 요구하는 방식 (예: 비밀번호 + OTP).
- 장점: 보안성 향상.
- 단점: 추가적인 인증 요소가 필요해 사용성이 약간 떨어질 수 있음.
2.4. JWT (JSON Web Token)
- 설명: 인증이 완료되면 서버가 사용자에게
JWT라는 토큰을 발급하여, 클라이언트는 이후 요청 시 이 토큰을 헤더에 포함하여 인증을 대체하는 방식.
- 장점: 세션 저장 없이 무상태(stateless) 인증 가능.
- 단점: 토큰 탈취 시 악용 가능성.
3. 인증 프로세스
- 사용자 입력: 사용자는 로그인 폼에 아이디와 비밀번호 또는 OAuth 정보를 입력합니다.
- 인증 요청: 클라이언트는 서버로 인증 요청을 보냅니다.
- 인증 확인: 서버는 해당 정보를 확인하고, 올바르면 인증을 완료하고 세션 또는 토큰을 발급합니다.
- 인증 유지: 사용자는 세션 쿠키 또는 JWT를 통해 인증된 상태를 유지하며 애플리케이션을 사용합니다.
4. 인증과 권한(Authorization)의 차이
- Authentication(인증): 사용자가 누구인지 확인하는 과정.
- Authorization(권한): 인증된 사용자가 어떤 자원에 접근할 수 있는지 결정하는 과정.
5. 주요 보안 고려 사항
- 암호화: 비밀번호는 반드시 암호화하여 저장 (예: bcrypt).
- 세션 관리: 세션 탈취를 방지하기 위한 보안 조치 필요 (예: CSRF, XSS 방지).
- 토큰 만료: JWT는 만료 기간을 설정하여 토큰 탈취 후의 악용을 방지.
- 2FA: 중요한 기능이나 민감한 데이터를 다루는 경우 2단계 인증을 적용하여 보안 강화.
6. 관련 기술 및 라이브러리
- OAuth:
Passport.js, NextAuth.js
- JWT:
jsonwebtoken
- 2FA:
Google Authenticator, Authy
- 암호화:
bcrypt, argon2
참고 자료