728x90
반응형
SMALL
Spring in Action (5판)
- 스프링 5의 강력한 기능과 생산성을 활용한 웹 애플리케이션 개발
- Walls, Craig 지음
- 제어펍 출판사
- 2020.05.14
스프링 인 액션 개인 스터디 내용을 정리하자.
Spring Security
스프링 기반의 애플리케이션 보안, 인증, 권한을 담당하는 프레임워크이다.
Filter 기반으로 동작하기 때문에 Spring MVC와 분리되어 관리, 동작한다.
- 접근 주체 (Principal) : 보호된 대상에 접근하는 유저
- 인증 (Authenticate) : 현재 유저가 누구인지 확인, 애플리케이션 작업을 수행할 수 있는 주체임을 증명
- 인가 (Authorize) : 현재 유저가 어떤 서비스, 페이지에 접근할 수 있는 권한이 있는지 검사
- 권한 (Authirization) : 인증된 주체가 애플리케이션 동작을 수행할 수 있도록 허락되는지 결정
Spring Security 구조
스프링 시큐리티는 세션 - 쿠키 방식으로 인증한다.
- 유저가 로그인 시도 (HTTP Request)
- AuthenticationManager는 인증과 관련된 실제적 처리를 담당
- AuthenticationManager는 UserDetailsService에 선언된 정보를 바탕으로 User DB에 접근
- DB에 있는 유저라면 UserDetail로 꺼내서 유저의 세션을 생성
- 스프링 시큐리티의 인메모리 세션저장소인 SecurityContextHolder에 저장
- 유저에게 세션 ID와 함께 응답 전달
- 이후 요청 시, 요청 쿠키에서 JSESSIONID를 까서 검증 후 유효하면 인증
개발자는 UserDetailsService 인터페이스를 구현하고 인증 매니저에 연결하는 작업만 진행하면 된다.
Spring Security 사용
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity htto) throws Exception {
// HTTP 보안 구성
}
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
// 사용자 인증 정보 구성
// 인증을 하기 위해 사용자를 찾는 방법을 지정하는 코드 (사용자 스토어 구성)
}
}
스프링 5부터는 비밀번호 암호화 필수
password() 메서드를 호출하여 암호화하지 않으면 접근 거부(HTTP 403) 또는 Internal Server Error(HTTP 500) 발생
사용자 스토어
- 인메모리
- 사용자 정보의 추가, 변경이 쉽지 않고 보안 구성 변경 시 빌드, 배포, 설치를 다시 진행하기에 테스트 목적이나 간단한 애플리케이션에 사용
- JDBC
- 사용자 정보는 관계형 데이터베이스로 유지, 관리되는 경우가 많으므로 JDBC 기반의 사용자 스토어가 적합
LDAP (Lightweight Directory Access Protocol)
인터넷 기반의 분산 디렉터리 서비스를 제공하는 공개된 프로토콜
LDAP의 기본 인증 전략은 사용자가 직접 LDAP 서버에서 인증받거나 비밀번호를 비교하게 하는 것
- 입력된 비밀번호를 LDAP 디렉터리에 전송
- 전송된 비밀번호를 사용자의 비밀번호 속성 값과 비교하도록 LDAP 서버에 요청
- 비밀번호 비교는 LDAP 서버에서 수행되므로 실제 비밀번호는 노출X
- 실제 비밀번호가 서버에 유지되는 것이 장점이지만, 비교되는 비밀번호는 LDAP 서버에 전달될 때 노출 위험 존재
- 그렇기에 passwordEncoder() 메서드를 통해 암호화 인코더 사용
디렉터리 서비스
특정 이름을 기준으로 대상을 찾아 조회, 편집할 수 있는 서비스
도메인 이름을 기준으로 IP 주소, 데이터를 접근하는 DNS도 일종의 디렉터리 서비스이다.
CSRF (Cross-Site Request Forgery)
크로스 사이트 요청 위조
- 사용자가 로그인한 상태에서 악의적인 코드가 삽입된 페이지 오픈
- 공격 대상이 되는 웹사이트에 자동으로 폼이 제출
- 로그인한 사이트는 위조된 공격 명령이 믿을 수 있는 사용자로부터 제출된 것으로 판단하여 공격에 노출
방어
- 애플리케이션에서는 폼의 숨김 필드에 넣을 CSRF 토큰 생성
- 숨김 필드에 토큰 추가
- 폼이 제출될 때, 폼의 다른 데이터와 함께 토큰도 서버로 전송
- 서버에서는 이 토큰을 원래 생성했던 토큰과 비교
- 토큰 일치 시, 해당 요청 처리 허용
- 토큰 불일치 시, 토큰의 존재를 모르는 악의적인 웹사이트의 공격으로 판단
스프링 시큐리티에는 내장된 CSRF 방어 기능 존재, _csrf라는 필드에 토큰을 넣어 폼에 포함시켜 전송하면 된다.
728x90
반응형
LIST
'Study > Spring in Action' 카테고리의 다른 글
[Spring in Action] Spring REST (0) | 2021.01.24 |
---|---|
[Spring in Action] Spring 구성 속성 사용하기 (0) | 2021.01.24 |
[Spring in Action] JDBC & JPA 데이터로 작업하기 (0) | 2021.01.24 |
[Spring in Action] Spring Filter & Interceptor & AOP (0) | 2021.01.23 |
[Spring in Action] Spring AOP 예제 만들어 적용하기 (0) | 2021.01.23 |