Spring Security 필터 순서 — 인증 수단 등록을 URL 인가로 막을 수 없었다
1차 인증만 통과한 세션에서 2단계 인증을 끄거나 패스키를 새로 심을 수 있으면 MFA 는 의미가 없다. 경로 인가 규칙으로 막으려 했는데 안 통했다. Spring Security 필터 순서를 직접 찍어보고 필터로 옮긴 기록.
백엔드 개발하면서 실제로 부딪힌 것들을 정리합니다. JPA, 데이터베이스 설계, AI 코딩 도구까지 — 교과서 설명 대신 실무에서 어떤 선택을 왜 했는지 씁니다.
1차 인증만 통과한 세션에서 2단계 인증을 끄거나 패스키를 새로 심을 수 있으면 MFA 는 의미가 없다. 경로 인가 규칙으로 막으려 했는데 안 통했다. Spring Security 필터 순서를 직접 찍어보고 필터로 옮긴 기록.
로그인에 한 번 실패하고 다시 성공하면 OAuth2 흐름이 끊겼다. Spring Security 가 로그인 후 돌아갈 주소를 저장하는 SavedRequest 는 자리가 하나뿐이라, 그사이 다른 보호 URL 을 건드리면 덮어써진다. 직접 재현한 기록.
패스키 등록 ceremony 는 요청 두 번으로 나뉜다. 그 사이에 challenge 를 세션에 담았다가 NotSerializableException 이 났고, JSON 으로 바꿨더니 이번엔 읽을 수가 없었다. WebAuthn 등록 옵션 보관 문제를 실제로 돌려서 확인한 기록.
패스워드로 로그인하고 일회용 토큰으로 2차 인증까지 통과했는데 보호된 자원이 계속 막혔다. Spring Security MFA 는 인증 표시를 권한으로 쌓는 구조인데, 병합이 기본값으로 꺼져 있었다. 조건 네 가지를 소스에서 확인하고 직접 돌려본 기록.
AWS SOA-C03 자격증 이야기예요. SysOps 가 작년 9월 CloudOps Engineer 로 이름이 바뀌었어요. SOA-C03 시험 구성이랑 SAA-C03와 뭐가 다른지 실무자 관점에서 정리했어요.
일회용 토큰과 패스키로 로그인하면 로그인은 성공하는데 /oauth2/token 이 500 으로 죽었다. Spring Security Jackson 직렬화 허용 목록에 없는 Authentication 이 인가 정보에 들어갔기 때문이다. 실제로 왕복시켜 확인하고 정규화로 해결한 기록.
요청·응답을 통째로 남기는 로깅 필터가 Google OTP 등록 페이지의 시크릿을 평문으로 찍고 있었다. 마스킹 정규식은 JSON 키만 알고 HTML은 모른다. Spring 응답 바디 로깅을 지울 것 고르기에서 기록할 것 고르기로 바꾼 기록.
패스워드로는 막히는 잠긴 계정이 일회용 토큰과 패스키로는 그대로 로그인됐다. Spring Security 계정 상태 검사는 Provider 마다 다르게 걸리기 때문이다. Spring Boot 4 / Security 7 로 재현하고 UserDetailsService 한 곳으로 모은 기록.
Server Sent Events 를 실서비스에 쓸 수 있을지 검토하며 직접 테스트한 기록이다. 24시간 재연결, 1.65MB 전송, 브라우저 종료 감지, 게이트웨이, 1만 클라이언트 부하, 그리고 커넥션 6개 제한까지.
Spring Cloud Config 저장소의 {cipher} 값을 어떻게 확인하는지, 그리고 설정을 바꿨을 때 서비스를 다시 빌드하지 않고 반영하는 방법(actuator refresh, bus-refresh)을 정리했습니다.