반응형
Backend Security Series 03
클릭 한 번으로 로그인,
OAuth2 & JWT 통합 아키텍처
안녕하세요, code-resting입니다. 보안 시리즈의 마지막 대미는 소셜 로그인(OAuth2)입니다. 단순히 구글이나 카카오 로그인을 구현하는 것을 넘어, 인증 성공 시 우리가 어제 만든 JWT 토큰을 클라이언트에게 어떻게 안전하게 전달하는지 그 전체 흐름을 완성해 보겠습니다.
1. OAuth 2.0 권한 부여 승인 코드 방식
우리가 구현할 방식은 보안상 가장 권장되는 Authorization Code Grant 방식입니다.
- ✅ 안전한 데이터 이동: 사용자의 비밀번호가 우리 서버로 전달되지 않습니다.
- ✅ 인증 대행: 신뢰할 수 있는 대형 플랫폼(Google, Kakao)에 인증 책임을 맡깁니다.
2. 핵심 클래스: CustomOAuth2UserService
로그인 성공 시 외부 플랫폼(Google 등)에서 가져온 유저 정보를 우리 DB에 저장하거나 업데이트하는 로직을 담당합니다.
@Service
public class CustomOAuth2UserService extends DefaultOAuth2UserService {
@Override
public OAuth2User loadUser(OAuth2UserRequest userRequest) {
OAuth2User oAuth2User = super.loadUser(userRequest);
// 플랫폼 식별 (google, kakao 등)
String provider = userRequest.getClientRegistration().getRegistrationId();
// 유저 정보 커스텀 파싱 및 DB 저장 로직
User user = saveOrUpdate(oAuth2User, provider);
return new CustomUserDetails(user, oAuth2User.getAttributes());
}
}
3. 인증 성공 후 JWT 발급 (SuccessHandler)
소셜 인증이 완료되면 onAuthenticationSuccess 핸들러가 실행됩니다. 여기서 JWT를 생성하여 클라이언트에게 리다이렉트 시 쿼리 파라미터나 쿠키로 전달합니다.
@Component
public class OAuth2SuccessHandler extends SimpleUrlAuthenticationSuccessHandler {
@Override
public void onAuthenticationSuccess(...) {
// 1. 로그인 유저 정보 꺼내기
OAuth2User oAuth2User = (OAuth2User) auth.getPrincipal();
// 2. JWT 토큰 생성
String accessToken = jwtProvider.createAccessToken(oAuth2User);
// 3. 프론트엔드 특정 페이지로 리다이렉트 (토큰 포함)
getRedirectStrategy().sendRedirect(request, response, "https://client.com/oauth/callback?token=" + accessToken);
}
}
💡 시리즈 마무리: 통합 보안 아키텍처
이로써 [자체 회원가입/로그인 + 소셜 로그인]을 모두 수용하면서, 모든 인증 결과로 JWT를 사용하는 현대적인 보안 구조가 완성되었습니다. 이 아키텍처는 확장성이 뛰어나 어떤 프론트엔드 환경(Web, Android, iOS)에서도 동일한 인증 로직을 유지할 수 있게 해줍니다.
반응형
'스프링 > SpringSecurity' 카테고리의 다른 글
| [실전] Spring Security + JWT 커스텀 필터와 인증 아키텍처 구현 가이드 (0) | 2026.03.17 |
|---|---|
| 로그인의 정석: Spring Security + JWT 무상태(Stateless) 인증 구조 완벽 이해 (0) | 2026.03.16 |
| JWT + SpringSecurity (0) | 2021.03.20 |
| SPRING SECURITY (0) | 2021.02.09 |
댓글