본문 바로가기

Spring Security7

[Spring Security] 로그인/로그아웃 구현 및 타임리프 적용 1. 개요 리엑트와 같은 클라이언트 사이드 렌더링일 경우 JWT 토큰을 사용해 로그인 처리를 했겠지만, 저같은 경우 서버 사이드 렌더링인 타임리프를 사용해 JWT 토큰 사용은 곤란했습니다. 따라서 시큐리티의 세션으로 로그인 로그아웃을 구현했고, formLogin을 사용했습니다. 2. 설정 정보 전체 설정 코드 아래는 SecurityConfig 설정입니다. 저는 스프링 부트 3.1, 스프링 시큐리티 6.1 버전을 사용하고 있습니다. @Configuration @RequiredArgsConstructor public class SecurityConfig { private final MemberDetailsService memberDetailsService; private static final int ONE.. 2023. 7. 5.
예외 디버깅 - java.lang.AssertionError: Expecting code to raise a throwable. 테스트코드 분석 및 리펙토링 1. 예외가 발생한 이유 분석하기 테스트 코드를 작성했는데 다음과 같은 에러 메세지가 떴습니다. Expecting code to raise a throwable. java.lang.AssertionError: Expecting code to raise a throwable. at co m.readingbooks.web.service.member.MemberServiceTest.register_fail_present_email(MemberServiceTest.java:83) 결론적으로 예외가 던져져야 하는데 던져지지 않아 생긴 예외입니다. 이것만 보면 별로 블로그 포스팅할 내용은 없지만, 예외 디버깅하는 과정에서 배운 점이 있어 공유하고자 포스팅을 작성했습니다. @Test void register_fail.. 2023. 6. 24.
[Spring Security] 인증(Authentication), 인가(Authorization), 권한(Authority), 역할(Role) 알아보기 1. 인증과 인가 인증(Authentication)이란? 인증은 시스템에 접근하기 위해 회원의 정보를 확인하는 것입니다. 인증은 인가 이전에 완료되며, 보통 회원의 로그인 정보가 필요합니다. 만약 인증이 실패한다면, 클라이언트는 401 UNAUTHORIZED 에러를 응답받습니다. 인가(Authorization)란? 인가란 특정 리소스에 접근하려는 회원의 권한을 확인하는 것입니다. 인가는 항상 인증 이후에 일어나며, 회원의 권한(privilege)이나 역할(role)이 필요합니다. 만약 인가가 실패한다면, 클라이언트는 403 FORBIDDEN 에러를 응답받습니다. 2. 권한(Authority)들은 어떻게 저장될까? 스프링 시큐리티에서 권한들과 역할은 기본적으로 GrantedAuthority에 저장됩니다. .. 2023. 6. 19.
[Spring Security] CORS, CSRF란? CORS란? CORS란 “Cross-Origin Resource Sharing”의 약자입니다. CORS는 프로토콜인데, 서로 다른 origin일 시 리소스와 상호 작용하기 위해 클라이언트인 브라우저에서 실행되는 스크립트입니다. 예를 들어 UI 앱에서 서로 다른 도메인인 API를 호출할 시 CORS로 인해 기본적으로 차단됩니다. 이는 대부분의 브라우저에서 구현되는 W3C의 스펙입니다. 따라서 CORS는 보안이나 공격과 같은 문제가 아니라 서로 다른 Orgin 간의 데이터 및 통신을 할 때 브라우저에서 이를 중지하기 위해 제공하는 기본 보호 기능입니다. 예를 들어 큰 규모의 IT 기업일 경우 백엔드 서버와 프론트엔드 서버의 IP가 서로 다릅니다. 이때 프론트엔드 서버에서 클라이언트가 로그인을 했을 때, 백엔.. 2023. 6. 14.
[Spring Security] Password Encoder 알아보기 1. Password Encoder의 역할? 비밀번호를 저장할 때, 일반 플레인 텍스트를 데이터베이스에 저장하면 안 됩니다. DBA나 해커가 고객 데이터베이스에 접근한다면, 비밀번호를 볼 수 있기 때문입니다. 따라서 비밀번호는 암호화 과정을 거쳐 데이터베이스에 저장하는 것이 바람직합니다. 여기 몇 가지 암호화 과정이 있습니다. 인코딩 방법 인코딩 방법은 데이터를 한 형식에서 다른 형식으로 변환하는 프로세스이며 암호화와는 관련이 없습니다. 이 방법은 이미 너무 알려져 있으며, 복호화도 쉽습니다. 따라서 인코딩은 보안이 필요한 데이터에 사용되지 않습니다. 인코딩 방식은 ASCII, BASE64, UNICODE 방식이 있습니다. Encryption 방법 Encryption 방법은 테이터를 변환하는 프로세스로 .. 2023. 6. 12.
[Spring Security] UserDetailsService와 UserDetails 및 Authentication의 차이점 1. UserDetailsManager 이해하기 스프링 시큐리티 필터를 거친 다음, AuthenticationManager는 적절한 Provider를 선택한 후 UserDetailsManager를 호출합니다. 상속도 전반적인 상속도입니다. 최하단의 3개의 클래스는 Spring Security에서 기본적으로 제공하는 매니저이며, 개발자가 정의한 매니저를 사용할 수 있습니다. 1. UserDetailsService UserDetailService에서는 클라이언트에게 받은 username을 검색합니다. 해당 인터페이스에는 loadUserByUsername() 메소드만 정의되어 있습니다. public interface UserDetailsService { UserDetails loadUserByUsername(.. 2023. 6. 10.