Spring/Spring Security 19

[JWT] 2. AccessToken과 RefreshToken

1. AccessToken권한 토큰보안 리소스를 접근하고자 하는 유저에게 부여사용자 정의 클레임을 두어 사용할 수 있습니다. (IP 등) 유효기간보안상 을 짧은 시간으로 설정 (1시간)공격자에 의해 노출되더라도 오랜시간 사용하지 못하게 하기 위함입니다.만료 시, 재요청이 필요합니다 (만료되면 효과가 없습니다.) 2. RefreshToken권한 토큰 갱신AccessToken이 만료될 때, 새로운 AccessToken을 요청하기 위한 토큰입니다. 유효기간AccessToken과 다르게 긴 유효시간을 가집니다. 사용자 경험 향상주기적인 AccessToken 발급에 대한 사용자 인증 요청을 줄일 수 있음AccessToken이 만료되면, 클라이언트는 새로운 AccessToken을 받기위해 인증서버에 새로운 요청을..

[JWT] 1. JWT Token

1. JWTJSON 형식의 토큰 표준입니다. (RFC 7519)URL의 일부 혹은 HTTP 헤더에 포함시켜 토큰을 전달합니다. 특징경량성간결하고 크기가 작음제약된 환경에서 정보를 간단하게 전달하는데 사용됨 보안성서명된 토큰무결성 보장: 정보가 위조되지 않았음을 검증할 수 있음Algorithm: HMAC, RSA 데이터 암호화 가능 (민감데이터 보호) 자급자족필요한 정보를 자체적으로 포함하고 있음서버측에서 별도의 상태를 유지할 필요가 없음서버는 토큰의 클레임 정보를 통해 별도의 데이터베이스 조회 없이 요청을 처리할 수 있음 2. 구성{ { "alg": "HS256", "typ": "JWT" }, { "sub": "1234567890", "name": "Jo..

[Spring Security] 3-4. 인증: 로그아웃

1. 로그아웃 아키텍쳐 Spring Security는 기본적으로 로그아웃 기능을 지원합니다. 기본 URI로 GET /logout, POST /logout가 있습니다. GET /logout : 로그아웃 확인 페이지를 보여줍니다 POST /logout : 로그아웃에 필요한 CSRF Token을 제공합니다. POST /logout 로 요청할 경우, 여러 LogoutHandler가 동작하여 작업합니다. SecurityContextLogoutHandler가 HTTP Session을 무효화 합니다. SecurityContextLogoutHandler가 SecurityContextHolderStrategy를 비웁니다. SecurityContextLogoutHandler가 SecurityContextRepository..

[Spring Security] 3-3. 인증: 패스워드 저장소

1. Password Storage Spring Security는 비밀번호를 안전하게 저장하기 위해 단방향 변환만 지원합니다. 입력 패스워드를 테이블에 저장된 해시 비밀번호와 비교하는데 유용합니다. Password 보안 기술 발전과정 초기 보안 처리의 문제점 초기에는 데이터베이스의 접근제어 기능에 의존하여 보안을 처리하였으며, 패스워드를 평문으로 저장하였습니다. 그러나 악의적인 공격자들의 공격으로 인해 아이디 - 패스워드 정보가 탈취되는 위험을 내포하고 있었습니다. 입력값을 악용한 공격이 생겨났습니다. (SQL Injection) 단방향 해싱의 도입 데이터베이스에 패스워드를 단방향 해싱하여 저장하도록 권장받았습니다. 단방향 해싱 값은 노출되더라도 원본을 알아내는 것이 매우 어렵습니다. 비선형 연산, 혼돈..

[Spring Security] 3-2. 인증: 아이디 / 패스워드

1. 인증 정보 습득방식 Spring Security는 기본적으로 클라이언트로부터 인증 정보를 얻기 위한 세가지 방법을 지원합니다. 기본 인증 방식은 HttpServletRequest 객체로부터 아이디 패스워드 정보를 얻습니다. Form Basic Digest 2. 비밀번호 저장소 (Password Storage) UserDetails UserDetails는 Spring Security에서 유저의 정보를 나타내는 인터페이스입니다. 사용자가 로그인 요청을 할 경우, DaoAuthenticationProvider는 UserDetailsService를 통해 사용자의 정보를 조회합니다. UserDetailsService에 의해 UserDetails 인터페이스의 구현체가 반환됩니다. UserDetails 구현체의..

[Spring Security] 5. 예외 처리

1. ExceptionTranslationFilter 요청에 대해 SecurityFilterChain의 필터들이 보안 처리 중 발생하는 인증 혹은 인가 예외에 대한 처리를 맡습니다. 인증 예외는 AccessDeniedException, 인가 예외는 AuthenticationException 입니다. 자바 예외와 HTTP Response 의 브릿지 역할을 합니다. AuthenticationException 이 발생할 경우 AuthenticationEntryPoint을 동작시킵니다. 인증 예외에 대해 원하는 동작을 커스터마이징 할 수 있습니다. 사용자를 로그인 페이지로 리다이렉트하거나 적절한 응답코드를 반환하는 등의 작업이 가능합니다. AccessDeniedException 이 발생할 경우 anonymous..

[Spring Security] 3. 인증: 아키텍쳐

1. 인증 저장소 - SecurityContextHolder, SecurityContext SecurityContextHolder 인증된 유저의 정보를 보관하는 저장소입니다. 다양한 방식의 인증 정보를 저장할 수 있습니다. 저장되는 인증 정보의 타입만 맞으면 됩니다. JWT, LDAP, OAuth, SSO 등 인증 정보를 저장하는 것이 사용자가 인증되었음을 나타내는 가장 간단한 방법입니다. SecurityContextHolder안에 담긴 SecurityContext(인증 정보)를 어떻게 보관할지 전략을 설정할 수 있습니다. SecurityContextHolderStrategy SecurityContextHolder 내의 MODE_ 로 시작하는 static 변수로 선언되어 있습니다. MODE_GLOBAL ..

[Spring Security] 2. 스프링 시큐리티 주요 아키텍처

1. 위임 필터 및 필터 빈 초기화DelegatingFilterProxy요청 처리 용 (FilterChain에 등록됨)Spring 제공 (Filter 인터페이스 구현) 위임자Spring에 등록된 Bean Filter 사용FilterChainProxyBean Filter를 체이닝한 Proxy Bean작업 처리를 위임받습니다.FilterChainProxy 찾기: 'springSecurityFilterChain'라는 이름으로 Bean을 검색하여 찾습니다. 브릿지Servlet Container와 ApplicationContext 통합 (다른 라이프사이클 해결)FilterChain은 Servlet Container가 초기화 전에 Bean Filter의 인스턴스를 가지고 있어야 합니다.그러나 FilterChain ..

[Spring Security] 2-1. 인증 필터

Security Bean Filter는 SecurityFilterChain API를 통해 FilterChainProxy에 삽입됩니다. Security Bean Filter는 인증, 인가, 보안 등을 목적으로 만들어진 다양한 구현체들이 존재합니다. 1. BasicAuthenticationFilter - HTTP Basic 인증 보호자원 접근 시 서버가 클라이언트에게 401응답과 함께 'WWW-authenticate-header'을 기술해서 인증요구를 보냅니다. Client는 ID:Password 값을 Base64로 Encoding한 문자열을 Authentication Header에 추가한 뒤 Server에게 Resource를 요청 ID, Password가 Base64로 Encoding되어 있어 ID, Pa..