티스토리 뷰
웹 또는 모바일 서비스를 개발하다 보면, "로그인" 기능은 항상 빠지지 않는 필수 요소이다.
하지만 단순히 아이디와 비밀번호만 일치하면 로그인 처리하는 방식은 이제는 보안적으로 너무 약하다.
그래서 요즘은 2FA(2단계 인증, 2 Factor Authenticaion), 특히 OTP(일회용 비밀번호) 기반 인증 방식이 많이 사용되는데
이번 프로젝트에서는 실제 서비스에서 사용되는 OTP 기반 2단계 인증 흐름을 직접 설계하고 구현해보겠다.
✨ 시리즈 구성
1. OTP 기반 2단계 인증 시스템 직접 구현해보기 - 1 시스템 아키텍처 및 3단계 인증 흐름
2. OTP 기반 2단계 인증 시스템 직접 구현해보기 - 2 인증 서버를 구현해보자.
3. OTP 기반 2단계 인증 시스템 직접 구현해보기 - 3 비즈니스 논리 서버를 구현해보자.
4. OTP 기반 2단계 인증 시스템 직접 구현해보기 - 4 인증 서버와 비즈니스 논리 서버가 잘 동작하는지 확인해보자.
5. OTP 기반 2단계 인증 시스템 직접 구현해보기 - 5 멀티 모듈 구조를 MSA 구조로 리팩토링해보자.
✍️ 목표
단순한 로그인 기능이 아니라,
- 사용자 인증
- OTP 발급 및 검증
- JWT 기반 인증 토큰 발급
- Stateless 구조 기반의 보안 처리까지
전체 인증 시스템의 흐름과 구조를 직접 설계하고 구축해보자.
🧩 시스템 아키텍처
- 클라이언트: (Postman 또는 실제 앱/웹 프론트)
- 인증 서버: 사용자 ID/PW 인증, OTP 생성 및 검증, 최종 JWT 발급
- 비즈니스 서버: 보호된 API 제공, JWT 기반 인증 적용
🔐 3단계로 이루어진 인증 절차
1단계
: 사용자가 이름(username), 비밀번호(password)를 입력해 로그인을 시도한다.
이 요청이 비즈니스 서버의 /login 엔드포인트로 전달되며,
서버는 인증 서버와 연동해 사용자 자격 증명(아이디, 비밀번호)를 확인한다.
인증에 성공하면 서버는 해당 사용자에게 일회용 비밀번호(OTP)를 생성해 저장하고,
SMS를 보내는 대신 데이터베이스에 직접 저장된 OTP 값을 반환한다.
> 실제 서비스에서는 이 OTP가 문자나 이메일로 전송되겠지만, 여기선 개발 및 테스트를 위해 DB에서 직접 확인한다.
2단계
: OTP 인증 및 JWT 토큰 발급
앞서 받은 OTP 값을 사용자 이름과 함께 다시 /login 엔드포인트에 전달한다.
이때 서버는 입력된 OTP가 유효한지 검증하고, 정상일 경우 JWT 토큰(Access Token) 을 발급한다.
이 토큰은 사용자의 인증 상태를 증명해주는 역할을 하며, 추후 모든 API 요청 시 사용된다.
3단계
: 클라이언트는 JWT 토큰을 HTTP 요청의 Authorization 헤더에 담아 비즈니스 서버의 보호된 엔드포인트를 호출할 수 있다.
그럼 다음 포스팅에서는 인증 서버를 직접 구현해보자.
참고 : Spring Security in Action
'프로그래밍 > Spring Security' 카테고리의 다른 글
OAuth 2와 SSO의 차이 (0) | 2025.05.23 |
---|---|
SSO란? (0) | 2025.05.22 |
[Spring Security] SecurityContext의 Thread-safe 전략 (0) | 2025.05.20 |
[Spring Security in Action] 모놀리식 아키텍처 vs 마이크로서비스 시스템 (0) | 2025.05.20 |
[Spring Security] Spring Security 주요 아키텍처를 알아보자. (0) | 2025.05.19 |
- Total
- Today
- Yesterday
- LinkedList
- 22 정보처리산업기사
- 이코테
- 그리디
- 강의
- JPA
- challenges
- hackerrank
- hackerrank challenges
- ORM
- 정보처리 산업기사
- 해커랭크 자바 챌린지
- 자바의 정석
- 백준
- Spring Security
- 정보처리산업기사 공부법
- BAEKJOON
- queue
- 챌린지
- 코드
- 나동빈
- 정보처리산업기사
- 22 정보처리 산업기사
- 해커랭크
- 해커랭크 자바
- 자바
- 소스코드
- 해커랭크 챌린지
- 디버깅
- Java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |