Backend
home

Java 시큐어 코딩 2

생성 일시
2025/05/04 17:16
태그
Java
게시일
2025/05/05
최종 편집 일시
2025/05/13 14:10

1. OAuth2 보안

OAuth2란?

권한 위임 프로토콜이다. (사용자 대신 타사 앱이 리소스 접근 가능)
흔히 말하는 카카오 로그인, 구글 로그인이 OAuth2 기반이다.

OAuth 흐름 (Authorization Code Grant 기준)

1.
사용자 ⇒ 구글 로그인 요청
2.
구글 로그인 성공 후 인가 코드 (Auth Code) 발급
3.
애플리케이션이 인가 코드를 사용해 액세스 토큰 요청
4.
액세스 토큰으로 API 호출 (ex: 사용자 프로필 조회)

보안 이슈와 대응법

취약점
대응 방법
인가 코드 탈취
PKCE (Proof Key for Code Exchange) 사용
리디렉션 URL 변조
Redirect URI 검증 필수
토큰 탈취
토큰에 짧은 만료시간 + HTTPS 필수화
핵심: "OAuth2에서는 인가 코드 탈취 방지를 위해 PKCE를 사용하고, 토큰은 짧게 만료시켜 HTTPS로 암호화한다.”

2. JWT 토큰 보안 이슈와 해결법

JWT란?

Json Web Token: 인증, 인가 정보를 담은 자기 포함형 토큰
보통 헤더.페이로드.서명 형태로 구성됨

JWT의 보안 이슈

문제
설명
토큰 탈취 시 위험
JWT는 서명 검증만 하기 때문에 탈취되면 막을 방법 없음
긴 만료 시간
토큰 유출 시 피해가 오래 감
서버측 토큰 무효화 어려움
기본 JWT는 세션리스라서 서버 저장소가 없음

해결책

해결 방법
설명
토큰 만료시간 짧게 설정
보통 15분 내외 권장
리프레시 토큰 + 재발급 구조
액세스 토큰 짧게, 리프레시 토큰은 길게 관리
Redis 같은 서버측 블랙리스트 적용
강제 로그아웃·무효화 구현 가능
핵심:
"JWT는 탈취 시 위험하므로 액세스 토큰은 짧게, 리프레시 토큰은 서버 저장소(Redis 등)로 관리해 무효화할 수 있도록 한다."

3. Spring Security 커스터마이징

기본 구조

Filter Chain 기반 → 요청이 들어오면 여러 필터를 통과하며 인증, 인가 수행

커스터마이징 포인트

커스터마이징 영역
방법
인증 방식 변경
UsernamePasswordAuthenticationFilter 대체
인가 로직 변경
AccessDecisionVoter 또는 AuthorizationManager 구현
JWT 인증 필터 추가
OncePerRequestFilter 상속해 등록
로그인 성공/실패 처리
AuthenticationSuccessHandler 구현

예시: JWT 필터 추가

public class JwtAuthenticationFilter extends OncePerRequestFilter { protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String token = resolveToken(request); if (token != null && jwtProvider.validateToken(token)) { Authentication auth = jwtProvider.getAuthentication(token); SecurityContextHolder.getContext().setAuthentication(auth); } filterChain.doFilter(request, response); } }
Java
복사

등록 방법

http.addFilterBefore(new JwtAuthenticationFilter(jwtProvider), UsernamePasswordAuthenticationFilter.class);
Java
복사
핵심: "Spring Security에서 커스텀 JWT 인증을 구현하려면 OncePerRequestFilter로 필터를 만들고, SecurityContext에 인증 객체를 넣어준다."

4. 정리

주제
면접용 핵심 키워드
OAuth2
PKCE, Redirect URI 검증, 짧은 만료시간
JWT
탈취 위험, 액세스/리프레시 분리, 서버측 무효화
Spring Security 커스텀
Filter Chain, OncePerRequestFilter, SecurityContext