Spring security/01.Security
-
이번 포스트에서는 @Controller에서 Spring Security 사용에 대해 알아보자.Controller에서의 Spring Security UserDetails 활용Controller의 handler method에서 UserDetails를 파라미터로 받아서 활용할 수 있다. 이때 파라미터에는 @AuthenticationPrincipal 이라는 애너테이션이 선언되어 있어야 한다. 따라서 로그인 사용자 정보를 찾아서 더이상 직접 HttpSession을 사용하지 않아도 된다.@GetMapping({"/", "/index"})public String home(Model model, HttpSession session, @AuthenticationP..
12. Controller에서의 Security이번 포스트에서는 @Controller에서 Spring Security 사용에 대해 알아보자.Controller에서의 Spring Security UserDetails 활용Controller의 handler method에서 UserDetails를 파라미터로 받아서 활용할 수 있다. 이때 파라미터에는 @AuthenticationPrincipal 이라는 애너테이션이 선언되어 있어야 한다. 따라서 로그인 사용자 정보를 찾아서 더이상 직접 HttpSession을 사용하지 않아도 된다.@GetMapping({"/", "/index"})public String home(Model model, HttpSession session, @AuthenticationP..
2022.11.22 -
이번 포스트에서는 RememberMe 서비스에 대해 살펴보자.Remember-Me 처리Remember-Me는 로그인 정보를 쿠키에 저장해 두었다가 나중에 사용하는 기법이다. 쿠키를 안전하게 사용하려면 암호화해야 하고 로그아웃 할 때 쿠키 삭제 등 관리가 필요한데 Spring Security에서는 이 과정을 아주 단순히 처리할 수 있다.Remember-Me 기능을 이용하기 위해서는 화면단에 단지 remember-me라는 이름의 checkbox가 추가되면 된다.{{^SPRING_SECURITY_CONTEXT}} {{>include/csrf}} 아이디: 비밀번호: 로그인 유지: 로그인{{/SPRING_SECURITY_CONTEXT}} HttpSecurity 설..
11. RememberMe 서비스이번 포스트에서는 RememberMe 서비스에 대해 살펴보자.Remember-Me 처리Remember-Me는 로그인 정보를 쿠키에 저장해 두었다가 나중에 사용하는 기법이다. 쿠키를 안전하게 사용하려면 암호화해야 하고 로그아웃 할 때 쿠키 삭제 등 관리가 필요한데 Spring Security에서는 이 과정을 아주 단순히 처리할 수 있다.Remember-Me 기능을 이용하기 위해서는 화면단에 단지 remember-me라는 이름의 checkbox가 추가되면 된다.{{^SPRING_SECURITY_CONTEXT}} {{>include/csrf}} 아이디: 비밀번호: 로그인 유지: 로그인{{/SPRING_SECURITY_CONTEXT}} HttpSecurity 설..
2022.11.22 -
이번 포스트에서는 대표적인 보안 공격 중 하나인 CSRF(Cross Site Request Forgery)의 대책에 대해 살펴보자. CSRF 대책 CSRF?CSRF(Cross Site Request Forgery: 크로스 사이트 요청 위조)란 웹에서 행해지는 대표적인 해커의 공격 유형 중 하나이다. 다음 이미지는 어떻게 CSRF 공격이 일어나는지 보여준다. www.fictitiousbank.com의 고객인 bob은 정상 은행 사이트에 로그인 하고 정상적인 쿠키가 발행된다.우리의 희생자 Bob은 "저리에 돈을 빌려준다"는 혹하는 이메일을 받고 첨부된 이미지를 클릭한다.하지만 그 이미지의 경로에는 공격자에게 이체하는 동작이 연결되어있었다. ㅜㅜ이제 Bob의 이체 동작은 쿠키를 타고 www.fictitiou..
10. CSRF 처리이번 포스트에서는 대표적인 보안 공격 중 하나인 CSRF(Cross Site Request Forgery)의 대책에 대해 살펴보자. CSRF 대책 CSRF?CSRF(Cross Site Request Forgery: 크로스 사이트 요청 위조)란 웹에서 행해지는 대표적인 해커의 공격 유형 중 하나이다. 다음 이미지는 어떻게 CSRF 공격이 일어나는지 보여준다. www.fictitiousbank.com의 고객인 bob은 정상 은행 사이트에 로그인 하고 정상적인 쿠키가 발행된다.우리의 희생자 Bob은 "저리에 돈을 빌려준다"는 혹하는 이메일을 받고 첨부된 이미지를 클릭한다.하지만 그 이미지의 경로에는 공격자에게 이체하는 동작이 연결되어있었다. ㅜㅜ이제 Bob의 이체 동작은 쿠키를 타고 www.fictitiou..
2022.11.22 -
이번 포스트에서는 UserDetails와 UserDetailsService의 커스터마이징 필요와 방법에 대해 살펴보자. UserDetails 커스터마이징 기본 UserDetails의 문제점이제 로그인/로그아웃 관리 및 secured resource에 대한 접근 관리를 spring security가 처리해주니 훨씬 더 비지니스 로직에 집중할 수 있게 되었다.하지만 여전히 아쉬움이 남는데 바로 사용자 계정 정보를 담고있는 UserDetails에는 단지 사용자의 아이디와 비밀번호, role 정보등 만 담긴다는 점이다. 결과적으로 로그인에 성공했을 때 "admin 님 반갑습니다."의 형태로만 정보를 출력할 수 있다. ID 보다는 이름을 활용하여 "관리자님 반갑습니다."의 형태가 훨씬 부드럽지만 기본 UserDe..
09. UserDetails와 UserDetailsService 커스터마이징이번 포스트에서는 UserDetails와 UserDetailsService의 커스터마이징 필요와 방법에 대해 살펴보자. UserDetails 커스터마이징 기본 UserDetails의 문제점이제 로그인/로그아웃 관리 및 secured resource에 대한 접근 관리를 spring security가 처리해주니 훨씬 더 비지니스 로직에 집중할 수 있게 되었다.하지만 여전히 아쉬움이 남는데 바로 사용자 계정 정보를 담고있는 UserDetails에는 단지 사용자의 아이디와 비밀번호, role 정보등 만 담긴다는 점이다. 결과적으로 로그인에 성공했을 때 "admin 님 반갑습니다."의 형태로만 정보를 출력할 수 있다. ID 보다는 이름을 활용하여 "관리자님 반갑습니다."의 형태가 훨씬 부드럽지만 기본 UserDe..
2022.11.22 -
앞선 spring security에서는 memory 기반에 사용자 정보를 추가하고 동작시켜보았다. 하지만 일반 실무에서 그럴리는 거의 없을 것이다. 이번 포스트에서는 JDBC 기반으로 사용자를 관리하는 방법에 대해 알아보자. AuthenticationManager AuthenticationManager와 DaoAuthenticationManager인증과 관련된 처리는 AuthenticationManager 인터페이스가 담당하는데 그 구현체는 ProviderManager이다. 말 그대로 인증 방식을 제공하는 Provider들(AuthenticationProvider)을 관리하는 객체이다. Provider는 상황에 따라 여러가지 형태가 가능하므로 ProviderManager는 Authentication..
08. JDBC를 이용한 인증앞선 spring security에서는 memory 기반에 사용자 정보를 추가하고 동작시켜보았다. 하지만 일반 실무에서 그럴리는 거의 없을 것이다. 이번 포스트에서는 JDBC 기반으로 사용자를 관리하는 방법에 대해 알아보자. AuthenticationManager AuthenticationManager와 DaoAuthenticationManager인증과 관련된 처리는 AuthenticationManager 인터페이스가 담당하는데 그 구현체는 ProviderManager이다. 말 그대로 인증 방식을 제공하는 Provider들(AuthenticationProvider)을 관리하는 객체이다. Provider는 상황에 따라 여러가지 형태가 가능하므로 ProviderManager는 Authentication..
2022.11.22 -
이번 포스트에서는 로그인/로그아웃 과정을 커스터마이징 해보자.로그인/로그아웃 과정 Form Login 절차인증되지 않은 사용자가 secured resource인 /private 를 요청한다.Spring Security의 AuthenticationFilter는 AccessDeniedException을 던져서 요청 거부를 나타낸다.예외를 ExceptionTranslationFilter가 받아서 AuthenticationEntryPoint 중 하나인 LoginUrlAuthenticationEntryPoint를 이용해 /login으로 redirection 보낸다.브라우저가 /login을 요청하면LoginController가 login.html 을 응답한다. 따라서 프로그래머는 get 방식의 /login을 처리할..
07. 로그인/로그아웃 커스터마이징이번 포스트에서는 로그인/로그아웃 과정을 커스터마이징 해보자.로그인/로그아웃 과정 Form Login 절차인증되지 않은 사용자가 secured resource인 /private 를 요청한다.Spring Security의 AuthenticationFilter는 AccessDeniedException을 던져서 요청 거부를 나타낸다.예외를 ExceptionTranslationFilter가 받아서 AuthenticationEntryPoint 중 하나인 LoginUrlAuthenticationEntryPoint를 이용해 /login으로 redirection 보낸다.브라우저가 /login을 요청하면LoginController가 login.html 을 응답한다. 따라서 프로그래머는 get 방식의 /login을 처리할..
2022.11.18 -
이제 본격적으로 Spring Security를 사용해보자. 사용자 관리와 UserDetailService PasswordEncoderSpring Security의 PasswordEncoder는 비밀번호가 안전하게 저장되도록 단방향 변환을 수행하는데 사용된다.Spring Security의 기본 PasswordEncoder로 4.X 까지는 NoOpPasswordEncoder(비밀번호를 암호화 하지 않아도 괜찮음)가 사용되다가 5.X 부터는 BCryptPasswordEncoder(BCrypt 해시 함수로 해싱)가 사용된다.하지만 기존의 애플리케이션들이 한번에 다 바뀔 수 없기 때문에 중간에 DelegatingPasswordEncoder를 도입하게 되었다. 그리고 가장 쉽게 처리하는 방식은 PasswordE..
06. 사용자 및 경로 관리이제 본격적으로 Spring Security를 사용해보자. 사용자 관리와 UserDetailService PasswordEncoderSpring Security의 PasswordEncoder는 비밀번호가 안전하게 저장되도록 단방향 변환을 수행하는데 사용된다.Spring Security의 기본 PasswordEncoder로 4.X 까지는 NoOpPasswordEncoder(비밀번호를 암호화 하지 않아도 괜찮음)가 사용되다가 5.X 부터는 BCryptPasswordEncoder(BCrypt 해시 함수로 해싱)가 사용된다.하지만 기존의 애플리케이션들이 한번에 다 바뀔 수 없기 때문에 중간에 DelegatingPasswordEncoder를 도입하게 되었다. 그리고 가장 쉽게 처리하는 방식은 PasswordE..
2022.11.18 -
이번 포스트에서는 전반적인 프로젝트 구성 및 환경 설정을 해보자. 문제링크 프로젝트 생성다음과 같이 프로젝트를 생성해보자.주요 특징은 Java17 기반의 Maven Project이고 Spring Boot DevTools, Lombok, Spring Web, Thymeleaf, Spring Security, H2 Database, Spring Data JPA를 사용한다. application.yml 편집spring data jpa와 h2, mustache 사용을 위한 yml 파일을 다음과 같이 작성해보자.logging: level: root: info pattern: console: '%clr(%d{HH:mm:ss} [%-5p] [%c{20}.%M.%L] %m%n)'spring: outpu..
05. 프로젝트 구성과 초기 동작이번 포스트에서는 전반적인 프로젝트 구성 및 환경 설정을 해보자. 문제링크 프로젝트 생성다음과 같이 프로젝트를 생성해보자.주요 특징은 Java17 기반의 Maven Project이고 Spring Boot DevTools, Lombok, Spring Web, Thymeleaf, Spring Security, H2 Database, Spring Data JPA를 사용한다. application.yml 편집spring data jpa와 h2, mustache 사용을 위한 yml 파일을 다음과 같이 작성해보자.logging: level: root: info pattern: console: '%clr(%d{HH:mm:ss} [%-5p] [%c{20}.%M.%L] %m%n)'spring: outpu..
2020.08.20