////
Search
Duplicate
🏕️

Chapter 4. 스프링 시큐리티

이 장에서 배우는 내용
스프링 시큐리티 Auto Configuration
커스텀 사용자 스토리지 정의하기
커스텀 로그인 페이지 만들기
CSRF 공격으로부터 방어하기
사용자 파악하기
사용자 id와 비밀번호의 조합으로 보호되는 이메일 계정이나 거래용 개인식별번호로 보호되는 증권 계좌의 어떤것이든 보안은 대부분의 어플리케이션에서 중요한 부분이다.

1. 스프링 시큐리티 활성화하기

스프링 부트 보안 스타터 의존성을 빌드 명세에 추가해두면 된다.
이 경우, 보안 스타터를 프로젝트 빌드 파일에 추가하면 다음의 보안 구성이 제공된다.
모든 HTTP 요청 경로는 인증되어야 한다.
어떤 특정 역할이나 권한이 없다.
로그인 페이지가 따로 없다.
스프링 시큐리티의 HTTP 기본 인증을 사용해서 인증된다.
사용자는 하나만 있으며 이름은 user다. 비밀번호는 암호화해 준다.
이번 장에서는 다음의 기능들을 만족할 수 있도록 구성해본다.
스프링 시큐리티의 HTTP 인증 대화상자 대신 우리의 로그인 페이지로 인증한다.
다수의 사용자를 제공하며 새로운 타코 클라우드 개곡이 사용자로 등록할 수 있는 페이지가 있어야 한다.
서로 다른 HTTP 요청 경로마다 서로 다른 보안 규칙을 적용한다.

2. 스프링 시큐리티 구성하기

보통 SecurityConfig로 정의되는 클래스는 스프링 시큐리티의 모든 설정을 구성하는 클래스다.
configure(HttpSecurity)는 HTTP 보안을 구성하는 메소드다.
configure(AuthenticationManagerBuilder)는 사용자 인증 정보를 구성하는 메소드다.

3. 웹 요청 보안 처리하기

보안 규칙을 각 경로에 적용하려면 configure(HttpSecurity)를 사용해야 한다.
이 메소드는 웹 수준에서 보안을 처리하는 방법을 구성하는 데 사용된다. 이를 사용해 처리할 수 있는 항목은 다음과 같다.
HTTP 요청 처리를 허용하기 전에 충족되어야할 특정 보안 조건을 구성한다.
커스텀 로그인 페이지를 구성한다.
사용자가 어플리케이션의 로그아웃을 수행할 수 있도록 한다.
CSRF 공격으로부터 보호하도록 구성한다.

1. 웹 요청 보안 처리하기

http .authorizedRequests() .antMathcers("/design", "/orders") .hasRole("ROLE_USER") .antMathcers("/", "/**").permitAll();
Visual Basic
복사
authorizeRequests()ExpressionInterceptUrlRegistry 객체를 반환하는데, 이 객체를 사용하면 URL 경로와 패턴 및 해당 경로의 보안 요구사항을 구성할 수 있다.
hasRole()permitAll()은 요청 경로의 보안 요구를 선언하는 메소드다. 다음 표는 이때 사용 가능한 모든 메소드를 보여준다.
메소드
하는 일
access(String)
인자로 전달된 SpEL 표현식이 true면 접근을 허용한다.
anonymous()
익명의 사용자에게 접근을 허용한다.
authenticated()
익명이 아닌 사용자로 인증된 경우, 접근을 허용한다.
denyAll()
무조건 접근을 거부한다.
fullyAuthenticated()
익명이 아니거나 또는 remember-me가 아닌 사용자로 인증되면 접근을 허용한다.
hasAnyAuthority(String…)
지정된 권한 중, 어느 하나라도 사용자가 갖고 있으면 접근을 허용한다.
hasAnyRole(String…)
지정된 역할 중, 어느 하나라도 사용자가 갖고 있으면 접근을 허용한다.
hasAuthority(String)
지정된 권한을 사용자가 갖고 있으면 접근을 허용한다.
hasIpAddress(String)
지정된 IP 주소로부터 요청이 오면 접근을 허용한다.
hasRole(String)
지정된 역할을 사용자가 갖고 있으면 접근을 허용한다.
not()
다른 접근 메소드들의 효력을 무효화한다.
permitAll()
무조건 접근을 허용한다.
rememberMe()
remember-me를 통해 인증된 사용자의 접근을 허용한다.

요약

스프링 시큐리티의 자동-구성은 보안을 시작하는 좋은 방법이다. 그러나 대부분의 어플리케이션에서는 보안 요구사항을 충족하기 위해 별도의 보안 구성이 필요하다.
사용자 정보는 여러 종류의 사용자 스토어에 저장되고 관리될 수 있다.
스프링 시큐리티는 자동으로 CSRF 공격을 방어한다.
인증된 사용자에 관한 정보는 SecuriyContext 객체를 통해서 얻거나 @AuthentifcationPrincipal을 사용해서 컨트롤러에 주입할 수 있다.