본문 바로가기

spring/security

(6)
Spring Security Test 작성하기 들어가면서 스프링 시큐리티를 적용하면 각 EndPoint를 접근할 때, 권한 인증은 어떻게 고려해서 테스트를 작성해야 하는지 고민이라면 읽어보는 것을 추천한다. 가짜 인증 만들어 인증/인가 단계 처리하기 시큐리티 테스트를 위해서 제공하는 어노테이션을 활용하면 임시로 인증 상태로 만들 수 있다. 1.@WithMockUser 시큐리티의 UsernamePasswordAuthenticationToken을 만들어서 주입해주는 어노테이션이다. 쉽게 말해서 인증된 유저를 설정하는 기능을 제공한다. @Test @WithMockUser public void getMessageWithMockUser() { String message = messageService.getMessage(); ... } 아무런 설정없이 사용하면..
[Spring security] SecurityContext, 접근 제한, 권한 제한에 대해서 들어가며 스프링 시큐리티에서 인증을 구현하기 위한 클래스의 역할을 중점으로 알아보자. 인증을 담당하는 요소들 interface description AuthenticationManager HTTP 필터 단계에서 요청을 수신하고 이 책임을 AuthenticationProvider에서 위임하는 책임을 지닌다. AuthenticationProvider 인증 방식(논리)를 책임하는 인터페이스로 로그인 방식에 따른 인증 방식이 존재한다. 인증 정보를 관리하는 요소 class description SecurityContext 인증된 사용자의 정보(Authentication)를 관리하는 문맥 SecurityContextHolder 요청(Thread)에 따른 사용자의 문맥을 관리하는 요소 하나의 스레드는 독립적인 문맥..
[Spring security] PasswordEncoder 살펴보기 들어가면서 도서 : 스프링 시큐리티 인 액션을 보고 내용을 정리한 글입니다. 자세한 내용은 책을 보는 것을 추천합니다. 이번 내용은 스프링 시큐리티의 암호화를 담당하는 모듈을 다루었다. PasswordEncoder 인터페이스 비밀번호는 민감한 정보이다. 외부에 노출이 된다면 중요한 정보를 탈취당할 수 있기 때문에 단단히 챙겨하는 정보이다. 이런 민감한 정보를 안전하게 보관하기 위해서 암호화를 하는데 스프링 시큐리티에서는 이런 암호화를 처리하는 역할을 인터페이스로 정의하고 있다. 바로 PasswordEncoder이다. 스프링 시큐리티를 적용하고 있다면 이 구현체 빈으로 등록하면 정의된 역할에 맞게 암호화를 적용할 수 있다. PasswordEncoder 구현체 BCryptPasswordEncoder, Arg..
[Spring security] Redis를 이용한 글로벌 세션 스토리지 시작글 Spring security는 Authentication 인증 객체를 세션에 보관하여 사용하는 것이 디폴트이다. 하지만 세션은 분산 컴퓨팅 환경에서 세션 또한 분산된다. 이점은 로그인 처리시에 로그인 상태를 확인하는 기능을 구현할 때 장애를 유발할 수 있다. 따라서 세션을 이용한 로그인 상태 처리 방식은 분산 환경에서 결함을 지니고 있다. 이를 해결하기 위한 방법은 in memory database를 이용하는 방법이다. 이런 DB 중에 하나가 Redis인데 이것을 이용하여 세션을 대체하는 방법을 적용해보자. +) 처음에는 SecurityContextRepository와 SecurityContext를 커스텀해서 사용해야하나? 생각했는데 다행히 더 좋은 효과적인 방법이 있었다. 이 방법은 HttpSe..
[Spring] UsernamePasswordAuthenticationFilter 를 통한 폼 로그인 하기 로그인 구현하기 UsernamePasswordAuthenticationFilter 는 폼 양식을 통한 로그인 처리를 시도할 때, 최소한의 개발로 로그인 처리를 쉽게 처리할 수 있게 도와준다. 폼 로그인을 구현하기 위해서 폼의 액션과 메서드 POST 방식 그리고 인풋 name이 username, password이어야 정상적으로 동작하기에 이를 주의하자. 구현을 위한 절차는 이렇다. 1. UserDetailsService 구현하기 요청한 로그인 유저이름을 통해서 db에 유저 정보를 조회하여 UserDetails 객체에 담아서 반환하도록 구현해야한다. 2. UserDetails 구현하기 UserDetails 인터페이스에 따른 역할에 맞게 구현해주면 된다. 메서드 이름을 보면 어떤 것을 구현할지 명확해서 이해하..
Oath2 로그인 구현 - 구글 Spring Oauth2 client를 이용하여 구글 로그인을 구현해 보자. 구현 절차 1. 구글 api 콘솔 프로젝트 등록 https://console.cloud.google.com/apis/dashboard?project=natural-reserve-315509 Google 클라우드 플랫폼 로그인 Google 클라우드 플랫폼으로 이동 accounts.google.com OAuth 동의 화면 설정하기 사용자 인증정보 > + 사용자 인증 정보 만들기 > OAuth 클라이언트 ID 만들기 "/login/oauth2/code/google" 이 디폴트 설정이라서 그대로 작성하면 되지만 중간에 url을 매핑 처리하는 어플리케이션 라우터 Kong을 운영하고 있어서 백엔드로 리디렉션을 요청할 수 있도록 "/api"..