Security

보안

Spring Security

Spring Security란 무엇이며, 어떤 기능을 제공하나요?

  • 스프링 시큐리티는 자바 애플리케이션에서 인가와 인증을 쉽게 구현할 수 있게 해주는 시큐리티 프레임워크입니다.

  • 인증(Authentication): 누구?

  • 인가(Authorization): 어떤 리소스에 접근 가능?

  • OAuth2, JWT 등의 최신 보안 기법과 쉽게 통합 가능

Spring Boot에서 Spring Security를 활용하여 로그인을 구현하는 방법을 설명해주세요.

spring-boot-starter-security 의존성을 추가하여 사용

JWT와 OAuth2

JWT(JSON Web Token)란 무엇이며, 어떻게 인증에 활용되나요?

JSON 포맷을 사용해 정보를 안전하게 전송하기 위한 토큰.

HTTP의 stateless 환경에서 사용자 인증인가를 처리할 때 주로 사용됩니다. 세션 방식과 달리 서버 측에서 세션을 저장하지 않고, 클라이언트가 JWT를 통해 인증 정보를 관리하므로 서버의 부담을 줄일 수 있는 장점이 있습니다.

  1. 로그인 요청시 서버는 인증 정보를 확인 후 JWT를 생성하여 클라이언트에게 반환

  2. 클라이언트는 JWT를 로컬 스토리지나 세션 스토리지 등에 저장

  3. 이후 클라이언트는 요청을 보낼떄마다 HTTP헤더의 Authorization 필드에 포함시켜 서버로 전송

  • 장점: Stateless, 확장성

  • 단점: 토큰 탈취 위험 -> Redis같은 인메모리 DB를 사용하여 블랙리스트 등을 관리

OAuth2란 무엇이며, 어떤 인증 방식을 제공하나요?

  • 제3자 서비스가 사용자 정보를 접근할 수 있도록 허가하는 인증 및 인가 프레임워크

  • 백엔드 중심 구조 기준으로

  1. 유저가 애플리케이션에서 "Google로 로그인" 버튼을 클릭함

  2. 유저의 브라우저는 클라이언트에 로그인 요청을 보냄

  3. 클라이언트유저에게 302 Redirect 응답을 보내며 인증서버로 리디렉션

  4. 유저인증서버에서 로그인 및 권한 동의를 진행함

  5. 인증서버Authorization Code클라이언트 redirect URI로 리디렉션함

  6. 클라이언트는 Authorization Code를 수신함

  7. 클라이언트는 Authorization Code를 이용해 Google 인증서버Access Token, Refresh Token 요청

  8. 인증서버Access Token, Refresh Token클라이언트에 응답

  9. 클라이언트는 Access Token을 사용해 Google API로부터 사용자 정보를 조회

  10. 이후 유저는 로그인된 상태로 클라이언트와 통신함. 필요한 경우 클라이언트가 토큰을 이용해 다시 사용자 정보에 접근

Last updated