Spring/Spring Security 31

[Spring Security] 6-2. OAuth2 Login: Core Configuration

유저가 oauth2 provider 또는 openid provider를 통해 애플리케이션에 로그인하도록 도와주는 기술Spring Security는 공식적으로 Google과 Github을 지원합니다. 1. Spring Boot Sample (Google)2. Spring Boot Property MappingsOAuth2Client 자동설정을 제공applicaion.yml ↔️ ClientRegistration 객체의 대응되는 속성으로 간단히 설정할 수 있음표) applicaion.yml ↔️ ClientRegistration더보기Spring BootClientRegistrationspring.security.oauth2.client.registration.[registrationId]registratio..

[Spring Security] 6-1. OAuth2

1. OAuth2 Resource Server보호된 자원에 대한 요청에 대하여, 인증 과정을 거쳐 자원을 응답하는 서버 Protect Access with an OAuth2 Access Token구분설명사용 구성JWT자체 서명 토큰 (일반적인 OAuth2/JWT 기반 API 보호)자체 디코딩 가능 (검증용 public key만 있으면 됨)Opaque Token토큰 내용을 알 수 없는 토큰introspection 엔드포인트로 검증(외부 인증 서버에서 introspection 제공 시 사용 가능) 설정) JWT더보기spring: security: oauth2: resourceserver: jwt: issuer-uri: https://my-auth-server.co..

[Spring Security] 4-2. Authorization: HttpServletRequests

request levet에서의 인가를 구현할 모델을 제공합니다.특정 prefix의 url에 대한 인가 권한을 요구할 수 있음HttpSecurity 객체를 통해 인가 룰을 정의할 수 있음 1. Understanding How Request Authorization Components Work 인가 동작 순서 (AuthorizationFilter)SecurityContextHolder에서 인증 정보를 가져오는 Supplier 생성Supplier와 HttpServletRequest를 AuthorizationManager에 전달authorizeHttpRequests()에 정의된 규칙들과 매칭하여 인가 판정 인가 실패AuthorizationDeniedEvent 이벤트 발생AccessDeniedException이 ..

[Spring Security] 4-1. Authorization: Architecture

1. AuthoritiesGrantedAuthority인증된 사용자가 가지고 있는 권한을 나타내는 객체단순 문자열로 권한을 표현함Authentication 객체 안에 리스트 형태로 저장됨 복잡한 권한 구조복잡한 권한 구조일 경우, 단순 문자열로 표현하기 어려움이런 경우, AuthorizationManager가 그 객체의 권한 부여 책임을 담당함Authorities의 getAuthority()는 null을 반환함 예시) 특정 계좌에만 접근 가능한 권한더보기권한 객체public class AccountAccessAuthority implements GrantedAuthority { private final Long accountId; public AccountAccessAuthority(Long ..

[Spring Security] 5-4. 보안: HttpFirewall

1. HttpFirewallSpring Security의 FilterChainProxy에 전달되는 요청을 검사하고, 위험한 요청을 차단하는 매커니즘서블릿 컨테이너마다 URL 해석 방식이 다르므로, 아래와 같은 경우에 보안 문제가 발생할 수 있음 역할HTTP 요청이 보안 필터 체인에 도달하기 전에 요청을 검사하고, 필요한 경우 수정하는 역할을 합니다.구분설명예시 / 차단 대상정규화URL 경로에서 위험한 문자나 패턴을 제거하여 안전하게 변환/a/../b, //multiple//slashes, /path;param=value 등요청 검증악의적인 요청을 식별하고 차단; 세미콜론이 포함된 경로비정상 쿼리 스트링허용되지 않은 HTTP 메서드HTTP 응답 분할 방지악의적 응답 조작이 일어나지 않도록 차단(응답 헤더에..

[Spring Security] 5-3. 보안: HTTP Requests

1. Redirect to HTTPSSpring Security에서 HTTP 요청을 자동으로 HTTPS로 리다이렉트시키는 설정 설정더보기@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http // ... .requiresChannel(channel -> channel .anyRequest().requiresSecure() ); return http.build();} 2. Strict Transport Security3. Proxy Server Configuration프록시나 로드 밸런서를 사용하는 환경에서 클라이언트의 실제 요청 정보를 애..

[Spring Security] 5-2. 보안: Security HTTP Response Headers

1. Default Security HeadersSpring Security는 응답 헤더에 보안에 관련된 헤더를 자동으로 추가해 줌 기본 보안 응답 헤더헤더 이름값설명목적Cache-Control(브라우저 캐시 제어)no-cache, no-store, max-age=0, must-revalidate 브라우저 캐시 차단(해당 페이지 및 리소스 캐시 ❌)사용자 민감정보 노출 방지(뒤로가기 시 민감정보가 남아있음)Pragmano-cache HTTP/1.0 캐시 비활성화HTTP1.0 시대의 캐시 헤더(버전 호환성을 위해 추가됨)Expires0만료일이 과거로 설정되어 캐시 방지HTTP1.0 시대의 캐시 헤더(버전 호환성을 위해 추가됨)X-Content-Type-Optionsnosniff브라우저가 MIME 타입 추측..

[Spring Security] 5-1. 보안: CSRF

1. CSRF 공격이란?위조된 사이트에서 클릭을 통해 사용자가 의도하지 않은 요청을 특정 사이트로 전송하는 공격입니다.공격자가 피해자의 웹 브라우저를 통해 웹 사이트에 대한 위조된 요청을 생성하는 공격입니다.의도하지 않은 요청에 대한 인증은 브라우저의 쿠키정보를 사용하여 통과합니다.사용자의 쿠키정보가 브라우저에 남아있는 점을 이용합니다. example사용자가 은행 웹사이트에서 이체 거래를 마쳤습니다.사용자는 메일 확인중, 모르는 자로부터 링크가 담긴 메일을 받았습니다.사용자는 경각심없이 메일의 링크를 클릭하였습니다.링크를 통해 이동한 웹 페이지에는 클릭만 하면 상품을 준다는 버튼이 있었습니다.사용자는 클릭을 하였습니다.이 버튼은 이전에 사용자가 사용했던 은행 웹사이트로 송금을 요청하는 버튼이었습니다.송금..

[Spring Security][KoLiving] 4-5. BlackList Token

BlacklistToken 시스템은 AccessToken의 보안 취약성을 보완하는 방법입니다.AccessToken은 짧은 유효기간으로 설정되도록 설계되어 탈취되더라도 오랫동안 사용할 수 없습니다.그러나 그 기간동안 악의적인 공격자로 인해 피해를 받는 것은 사실이며 짧은 기간내에도 큰 피해를 줄 수 있습니다.이러한 위험으로부터 보호하기 위해 유효하지 않은 AccessToken를 무효화하기 위해 도입되었습니다. 1. 인증 시 검증 절차로 확인@Slf4j@RequiredArgsConstructorpublic class JwtAuthenticationFilter extends OncePerRequestFilter { private final JwtProvider jwtProvider; private ..

[Spring Security][KoLiving] 4-4. RefreshToken Rotation

* 이전 포스팅의 시리즈입니다. 3. RefreshToken Rotation클라이언트가 RefreshToken를 통해 AccessToken를 새로 발급받을 경우 RefreshToken도 함께 새로 발급해주는 방식RefreshToken 의 보안 취약점을 최소화하는 기법입니다.만약 RefreshToken가 탈취되었다면, 서버는 RefreshToken 사용자가 악의적인 사용자인지 식별할 수 없습니다.RefreshToken Rotation은 이러한 취약점을 보완하고자 도입되었습니다.만약 AccessToken을 요청할 때마다 RefreshToken을 새로 발급하게 되면공격자가 RefreshToken를 새로 발급 받고 사용자가 이전 RefreshToken로 AccessToken를 요청할 경우서버에 저장된 Refre..