You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
sequenceDiagram
participant Client as 클라이언트
participant Filter as JwtAuthenticationFilter
participant JWT as JwtTokenProvider
participant Controller as API Controller
Client->>Filter: Authorization: Bearer JWT토큰
Filter->>JWT: 토큰 유효성 검증
JWT-->>Filter: 검증 결과
Filter->>Filter: SecurityContext에 인증 정보 저장
Filter->>Controller: 요청 전달
Controller-->>Client: API 응답
Loading
🏗️ 주요 컴포넌트
인증 관련
CustomOAuth2UserService: 카카오 사용자 정보 처리
OAuth2LoginSuccessHandler: 로그인 성공 후 토큰 발급 및 저장
JwtAuthenticationFilter: API 요청 시 JWT 토큰 검증
JwtTokenProvider: JWT 토큰 생성 및 검증
데이터 관리
RedisService: Redis 2개 서버 관리 (Primary/Backup)
AuthService: 인증 비즈니스 로직
UserRepository: 사용자 데이터 관리
AuthRepository: 인증 토큰 데이터 관리
📝 API 엔드포인트
인증 관련 API
POST /api/auth/refresh - 토큰 갱신
POST /api/auth/logout - 로그아웃
GET /api/auth/me - 현재 사용자 정보
GET /api/auth/status - 로그인 상태 확인
OAuth2 엔드포인트
/oauth2/authorization/kakao - 카카오 로그인 시작
/login/oauth2/code/kakao - 카카오 로그인 콜백
sequenceDiagram
participant User as 사용자
participant Browser as 브라우저
participant App as Spring Boot
participant Kakao as 카카오 서버
participant DB as MySQL
participant Redis as Redis
User->>Browser: 카카오 로그인 클릭
Browser->>App: /oauth2/authorization/kakao
App->>Kakao: 카카오 인증 페이지로 리다이렉트
User->>Kakao: 카카오 로그인
Kakao->>App: Authorization Code 전달
App->>Kakao: 토큰 요청 (code 교환)
Kakao->>App: Access Token + Refresh Token
App->>Kakao: 사용자 정보 요청
Kakao->>App: 사용자 정보 (카카오 ID)
App->>DB: 사용자 저장/조회
App->>DB: 카카오 토큰 저장
App->>App: JWT 토큰 생성
App->>Redis: JWT 토큰 저장
App->>Browser: 메인 페이지로 리다이렉트 (토큰 포함)
Browser->>Browser: 토큰을 localStorage에 저장
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
멋쟁이 뉴스 배달부 - 카카오 로그인 플로우
🔄 카카오 로그인 전체 플로우
1단계: 로그인 시작
http://localhost:8080접속/oauth2/authorization/kakao로 리다이렉트2단계: 카카오 인증 서버로 이동
https://kauth.kakao.com/oauth/authorize)로 사용자를 보냄3단계: 카카오에서 로그인
4단계: 카카오에서 우리 서버로 콜백
http://localhost:8080/login/oauth2/code/kakao?code=xxxxx로 리다이렉트5단계: Spring Security 내부 처리
https://kauth.kakao.com/oauth/token)에 토큰 요청https://kapi.kakao.com/v2/user/me) 호출6단계: CustomOAuth2UserService 실행
"id": "4321934110"7단계: OAuth2LoginSuccessHandler 실행
7-1. 카카오 데이터 저장
7-2. 우리 서비스 JWT 토큰 생성
7-3. Redis에 JWT 토큰 저장
7-4. 사용자를 메인 페이지로 리다이렉트
/?token=인코딩된토큰정보로 리다이렉트8단계: 프론트엔드에서 토큰 처리
🗄️ 데이터 저장 구조
Redis (임시 저장)
🔐 토큰 관리 방식
카카오 토큰
우리 서비스 JWT 토큰
🔄 API 호출 시 인증 플로우
sequenceDiagram participant Client as 클라이언트 participant Filter as JwtAuthenticationFilter participant JWT as JwtTokenProvider participant Controller as API Controller Client->>Filter: Authorization: Bearer JWT토큰 Filter->>JWT: 토큰 유효성 검증 JWT-->>Filter: 검증 결과 Filter->>Filter: SecurityContext에 인증 정보 저장 Filter->>Controller: 요청 전달 Controller-->>Client: API 응답🏗️ 주요 컴포넌트
인증 관련
CustomOAuth2UserService: 카카오 사용자 정보 처리OAuth2LoginSuccessHandler: 로그인 성공 후 토큰 발급 및 저장JwtAuthenticationFilter: API 요청 시 JWT 토큰 검증JwtTokenProvider: JWT 토큰 생성 및 검증데이터 관리
RedisService: Redis 2개 서버 관리 (Primary/Backup)AuthService: 인증 비즈니스 로직UserRepository: 사용자 데이터 관리AuthRepository: 인증 토큰 데이터 관리📝 API 엔드포인트
인증 관련 API
POST /api/auth/refresh- 토큰 갱신POST /api/auth/logout- 로그아웃GET /api/auth/me- 현재 사용자 정보GET /api/auth/status- 로그인 상태 확인OAuth2 엔드포인트
/oauth2/authorization/kakao- 카카오 로그인 시작/login/oauth2/code/kakao- 카카오 로그인 콜백sequenceDiagram participant User as 사용자 participant Browser as 브라우저 participant App as Spring Boot participant Kakao as 카카오 서버 participant DB as MySQL participant Redis as Redis User->>Browser: 카카오 로그인 클릭 Browser->>App: /oauth2/authorization/kakao App->>Kakao: 카카오 인증 페이지로 리다이렉트 User->>Kakao: 카카오 로그인 Kakao->>App: Authorization Code 전달 App->>Kakao: 토큰 요청 (code 교환) Kakao->>App: Access Token + Refresh Token App->>Kakao: 사용자 정보 요청 Kakao->>App: 사용자 정보 (카카오 ID) App->>DB: 사용자 저장/조회 App->>DB: 카카오 토큰 저장 App->>App: JWT 토큰 생성 App->>Redis: JWT 토큰 저장 App->>Browser: 메인 페이지로 리다이렉트 (토큰 포함) Browser->>Browser: 토큰을 localStorage에 저장🛡️ 보안 고려사항
🔄 토큰 갱신 플로우
/api/auth/refresh호출Beta Was this translation helpful? Give feedback.
All reactions