이 글은 정수원님의 Infrean 강의를 학습한 내용을 정리하여 작성합니다. 인증 API - AnonymousAuthenticationFilter 익명 사용자 인증 처리 필터 익명 사용자와 인증 사용자를 구분해서 처리하기 위한 용도로 사용된다. 화면에서 인증 여부를 구현할 때 isAnonymous() 와 isAuthenticated() 로 구분해서 사용된다. 예를 들어 isAnonymous() 인 경우 로그인 익명 사용자이므로 메뉴에 로그인을 추가할 수 있다. isAuthenticated() 인 경우 인증 사용자이므로 메뉴에 로그아웃을 추가할 수 있다. 인증 객체를 세션에 저장하지 않는다. AnonymousAuthenticationFilter가 사용자 요청을 받는다. SecutityContext 내부에 ..
스프링 시큐리티
이 글은 정수원님의 Infrean 강의를 학습한 내용을 정리하여 작성합니다. 인증 API - RememberMeAuthentiationFilter 인증을 처리한 사용자는 모두 SecurityContext 내부에 Autehntication 객체를 가진다. SecurityContext 내부에 Authentication 객체를 가지고 있지 않은 경우 (= Authentication 객체가 null인 경우) RememberMeAuthenticationFilter가 동작한다. 세션이 만료됨 세션이 끊어져 더이상 세션 안에서 SecurityContext 내부 Authentication 객체를 찾지 못하는 경우 이 두 경우 RememberMeAutenticationFilter가 동작해 인증을 시도한다. 사용자가 re..
이 글은 정수원님의 Infrean 강의를 학습한 내용을 정리하여 작성합니다. 인증 API - Remember Me 인증 세션이 만료되고 웹 브라우저가 종료된 후에도 애플리케이션이 사용자를 기억하는 기능이다. Remember-Me 쿠키에 대한 Http 요청을 확인한 후 토큰 기반 인증을 사용해 유효성을 검사하고 토큰이 검증되면 사용자는 로그인 된다. 사용자 라이프 사이클 인증 성공 (Remember-Me 쿠키 설정) 인증 실패 (쿠키가 존재하면 쿠키 무효화) 로그아웃 (쿠키가 존재하면 쿠키 무효화) http.rememberMe(); // rememberMe 기능이 작동한다. 실습 @Configuration public class SecurityConfig { @Autowired UserDetailsServ..
이 글은 정수원님의 Infrean 강의를 학습한 내용을 정리하여 작성합니다. 인증 API - Logout http.logout() // 로그아웃 기능이 작동한다. 스프링 시큐리티는 기본적으로 POST 방식을 사용해 로그아웃을 수행한다. 실습 // 스프링 시큐리티는 원칙적으로 GET 방식으로 로그아웃을 수행한다. http .logout() // 로그아웃 처리 .logoutUrl("/logout") // 로그아웃 처리 URL .logoutSuccessUrl("/login") // 로그아웃 성공 후 이동페이지 .addLogoutHandler(new LogoutHandler() { // 로그아웃 후 핸들러 @Override public void logout(HttpServletRequest request, Ht..
이 글은 정수원님의 Infrean 강의를 학습한 내용을 정리하여 작성합니다. 인증 API - Login Form 이증 UsernamePasswordAuthenticationFilter Form based Authentication 방식으로 인증을 진행할 때 아이디, 패스워드 데이터를 파싱하여 인증 요청을 위임하는 필터이다. AntPathRequestMatcher(/login) 현재 요청 정보의 URL이 '/login' 으로 시작하는지 검사한다. 기본적으로 '/login' 으로 시작한다. 이때 지난 글에서 사용한 loginProcessingUrl() 메소드를 통해 URL 변경이 가능하다. Authentication Authentication 객체 생성 후 내부에 Username과 Password 값을 저장..
이 글은 정수원님의 Infrean 강의를 학습한 내용을 정리하여 작성합니다. 인증 API - Form 인증 Login 사용자가 '/home' URL 로 GET 방식을 사용해 자원에 접근한다. 인증된 사용자만이 접근 가능하다. 인증이 되어 있지 않다면 로그인 페이지로 리다이렉트 시킨다. username과 password를 입력한 뒤 POST 방식으로 접근을 시도한다. 이때 서버의 스프링 시큐리티가 SESSION을 생성한다. SESSION 인증 결과를 담은 인증 토큰을 생성하고 SESSION에 저장한다. 사용자는 다시 '/home' URL로 자원 접근을 시도한다. 스프링 시큐리티는 사용자의 세션으로부터 인증 토큰 여부를 확인한다. 인증 API - Form Login 인증 http.formLogin(); //..
이 글은 정수원님의 Infrean 강의를 학습한 내용을 정리하여 작성합니다. 인증 API - HTTP Basic 인증 HTTP는 자체적인 인증 관련 기능을 제공하며 HTTP 표준에 정의된 가장 단순한 인증 기법이다. 간단한 설정과 Stateless가 장점이다. Session Cookie(JSESSIONID) 를 사용하지 않는다. 보호차원 접근 시 서버가 클라이언트에게 401 Unauthorized 응답과 함께 WWW-Authenticate header를 기술해서 인증요구를 보낸다. Client는 ID:Password 값을 Base64로 Encoding한 문자열을 Authorization Header에 추가한 뒤 Server에게 Resource를 요청한다. Authorization: Basic cm Vzd..
이 글은 정수원님의 Infrean 강의를 학습한 내용을 정리하여 작성합니다. 인증 API - 사용자 정의 보안 기능 구현 복습 스프링 시큐리티의 의존성 추가 시 일어나는 일들 서버가 기동되면 스프링 시큐리티의 초기화 작업 및 보안 설정이 이루어진다. 별도의 설정이나 구현을 하지 않아도 기본적인 웹 보안 기능이 현재 시스템에 연동되어 작동한다. 모든 요청은 인증이 되어야 자원에 접근이 가능하다. 인증 방식은 폼 로그인 방식과 httpBasic 로그인 방식을 제공한다. 기본 로그인 페이지를 제공한다. 기본 계정 한 개를 제공한다. username: user / password: 랜덤 문자열 문제점 계정 추가, 권한 추가, DB 연동 등 기본적인 보안 기능 외에 시스템에서 필요로 하는 더 세부적이고 추가적인 ..
이 글은 정수원님의 Infrean 강의를 학습한 내용을 정리하여 작성합니다. 인증 API - 프로젝트 구성 및 의존성 추가 서버 실행 io.security.basicsecurity.SecurityController @RestController public class SecurityController { @GetMapping("/") public String index() { return "home"; } } 스프링 시큐리티 의존성 추가 스프링 시큐리티의 의존성 추가 시 일어나는 일들 서버가 기동되면 스프링 시큐리티의 초기화 작업 및 보안 설정이 이루어진다. 별도의 설정이나 구현을 하지 않아도 기본적인 웹 보안 기능이 현재 시스템에 연동되어 작동한다. 모든 요청은 인증이 되어야 자원에 접근이 가능하다. 인..
이 글은 정수원님의 Infrean 강의를 학습한 내용을 정리하여 작성합니다. 실전 프로젝트 예제 미리보기 보안 정책 설정 1. 자원 및 권한 설정 마이페이지 자원 설정 /mypage 권한 매핑 ROLE_USER 메시지 자원 설정 /message 권한 매핑 ROLE_MANAGER 환경설정 자원 설정 /config 권한 매핑 ROLE_ADMIN 관리자 자원 설정 /admin/** 권한 매핑 ROLE_ADMIN 2. 사용자 등록 및 권한부여 3. 권한 계층 적용 ROLE_ADMIN > ROLE_MANAGER > ROLE_USER 4. 메소드 보안 설정 메소드 보안 서비스 계층 메소드 접근 제어 io.security.corespringsecurity.aopsecurity.AopMethodService.metho..