Spring/Spring Security9 SecurityContext, SecurityContextHolder SecurityContext Authentication객체가 저장되는 보관소 SecurityContextHolder전략(Strategy)에 따라 SecurityContext의 저장 방식이 다름 일반적으로는 ThreadLocal 에 저장 > 코드 어디서나 Authentication 을 꺼내서 사용가능 SecurityContextHolder SecurityContext객체의 저장 방식(Strategy)을 지정MODE_THREADLOCAL스레드당 SecurityContext 객체를 할당, 기본값MODE_INHERITABLETHREADLOCAL메인, 자식 스레드에서 동일한 SecurityContext 사용MODE_GLOBAL프래그램에서 딱 하나의 SecurityContext만 저장 2025. 4. 17. 토큰기반 인증, JWT 쿠키와 세션을 이용한 로그인 구현은세션을 서버에 저장해야하므로 비효율적, 서버 확장 시 서버간에 세션을 공유하기 어렵다. > 이러한 단점을 해결하기 위한 방법으로 토큰 기반의 인증 방법을 사용할수 있다. 토큰기반 인증 로그인 이후 서버가 토큰( 사용자 정보가 암호화 되어있는 문자열 )을 만들어서 사용자에게 넘겨준다. 이 토큰을 이용하여 인증된 사용자인지 서버가 판단함 JWT( JSON Web Tocken )인증에 필요한 정보들을 암호화 시킨 JSON 토큰JSON 데이터를 Base64 URL-safe Encode를 통해 인코딩하여 직렬화한 것( 일반적인 Base64 Encode를 URL에서 오류 없이 사용하도록 '+'와 '/'를 각각 '-', '_'으로 표현한 것 )토큰 내부에는 개인키를 통한 전자서명이 .. 2024. 11. 4. Security 메커니즘 Security는 요청을 처리하기 위해 필터 체인을 구성 다양한 필터로 구성되어 있으며, 각 필터는 요청을 처리하는 특정 기능을 담당 FilterChainProxy : 모든 필터를 관리하고 요청을 처리 스프링 시큐리티는 총 3가지의 계층(web,service, domain)에 대한 인가 처리를 지원한다.웹 계층URL 요청에 따른 인가 처리서비스 계층메소드 단위의 인가처리도메인 계층객체 단위의 인가처리 FilterSecurityInterceptor( -> AuthorizationFilter로 변경됨 )시큐리티 필터들 중 마지막에 위치하며 특정 요청 승인/거부 최종 결정 SecurityContextHolder에 Authentication 객체가 없거나, 적절한 권한이 없으면 예외를 발생시킴 인증, 권한 .. 2024. 10. 12. UserDetailsService 로 인증처리할때 password Spring Security에서는 DB에서 username으로 User정보( password 포함되있음 ) 가져와서, 사용자 입력 password랑 비교함( 사용자가 입력한 password ) 와 ( DB에 저장된 password ) 의 비교가 AuthenticationProvider에 의해 자동으로 처리됨 기본적으로 Spring Security는 DaoAuthenticationProvider를 사용 DaoAuthenticationProvider는 PasswordEncoder를 사용하여 비교( 사용자가 입력한 자격 증명 ) 과 ( UserDetailsService를 통해 로드된 사용자 정보 ) 을 비교합니다. 비교과정1. 사용자 로그인 시도2. AuthenticationManager 호출 로그인 폼 데.. 2024. 6. 10. formLogin()로 사용자가 로그인했을때 HttpSession Spring Security에서 formLogin()로 사용자가 로그인했을때 HttpSessionSpring Security는 HttpSession을 생성함SecurityContext가 생성되고 HttpSession에 저장됨 UsernamePasswordAuthenticationToken 에 들어있는 것들UsernamePasswordAuthenticationToken [ Principal = org.springframework.security.core.userdetails.User [ Username=user(로그인했던 ID), Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountN.. 2024. 6. 8. MD5형식으로 암호화 spring은 아니고, 그냥 java임아래와같이 선언해서 사용 import java.security.MessageDigest; ~MessageDigest md = MessageDigest.getInstance("MD5"); // "MD5 형식으로 암호화"MD5( Message-Digest algorithm 5 ) 임의의 길이의 값을 입력받아서 128비트 길이의 해시값을 출력하는 알고리즘 출력값에서 입력값을 복원하는 것은 일반적으로 불가능( 단방향 암호화 )같은 입력값이면 항상 같은 출력값이 나오고 , 서로 다른 입력값에서 같은 출력값이 나올 확률은 극히 낮다 흔히 패스워드 암호화에 많이 사용 패스워드를 MD5로 해시해서 나온 값을 저장 비밀번호를 정확하게 입력했다면 같은 해시값이 튀어나오므로, 본래의 .. 2024. 5. 21. 이전 1 2 다음