Spring Security
정의
- 스프링 기반의 보안을 담당하는 스프링 하위 프레임워크
- Filter 기반으로 동작하기에 Spring MVC와 분리되어 관리 및 동작.
보안 용어
접근 주체 Principal |
보호된 리소스에 접근하는 대상 |
인증 Authentication |
보호된 리소스에 접근하는 대상에 대해서 이 유저가 누구인지, 애플리케이션의 작업을 수행해도 되는 주체인지 확인하는 과정 |
인가 Authorize |
해당 리소스에 대해 접근 가능한 권한을 가지고 있는지 확인하는 과정 |
권한 | 어떠한 리소스에 대한 접근 제한, 모든 리소스는 접근 제어 권한이 걸려있다. 인가 과정에서 해당 리소스에 대한 제한된 최소한의 권한을 가졌는지 확인한다. |
인증의 절차
크리덴셜 인증 |
웹에서 사용하는 대부분의 인증 방식. 권한을 부여 받기위해 1차례의 인증과정이 필요하며 사용자명과 비밀번호를 입력받아 입력한 비밀번호가 저장된 비밀번호와 일치하는지 확인 Spring Security에서는 ID를 principle PWD를 credential이라고 부른다. |
이중 인증 |
2가지 방식으로 인증을 받는 것. 아이디 비밀번호 뿐만 아니라 인증 방식을 하나더 채택해 진행. |
물리적 인증 |
지문인식 키 삽입 등 |
권한부여(Authorization)
부여된 권한 Granted Authority |
인증 완료후 권한을 부여하는 것을 말한다. |
리소스의 권한 Intercept |
적절한 권한을 가진 자만 해당 자원에 접근할 수 있도록 자원의 외부요청을 원천적으로 가로채는것이 웹보안이며 권한 부여의 핵심이다. |
절차
- securiy를 담당할 xml 파일을 따로 만들어주고 web.xml에 경로를 지정해 준다.
- mvnrepository에서 security 관련 libarary를 받아온다.
- DispatcherServlet에서 클라이언트의 요청을 가로채면 Spring Security에 전달해 권한에 따라 접근 권한이 있는지 판단 하도록 DelegatingFilterProxy 클래스를 사용한다. Web.xml에 DelegatingFilterProxy를 등록한다.
- security와 관련된 context파일 설정을 해준다. Pom.xml 설정을 제대로 해주었다면 namespace에
security항목이 보일 것인데 security를 체크해준다.
인증단계
권한부여단계
- 권한을 부여하기 위해 권한이란 것을 설정해준다. http 태그는 인증 범위에 들어가고 권한부여는
<authorization-manager>가 담당한다.
로그인커스터마이징
- 로그인 페이지를 커스터마이징할 수 있다.form-login 태그를 사용한다.
form-login 속성들
login-page | 로그인 요청시 이동할 URL 설정 |
username-parameter | 로그인 id 파라미터명 설정 |
password-parameter | 비밀번호 파라미터명 설정 |
login-processing-url | form에서 전송할 URL 설정 |
- 로그아웃은 logout 태그를 사용한다.
login 속성들
invalidate-session | session을 무효화시킬지 결정하는 속성 |
logout-url | 로그아웃 요청시 이동할 url |
logout-success-url | 로그아웃 성공시 이동할 url |
로그인과 로그아웃 controller
- spring에서 error가 나면 error 정보를 보내오고 logout을 하면 logout 정보를 보내온다.
에러페이지 사용자 커스텀
- 에러페이지를 사용자가 지정할 수 있다. web.xml에 각 에러에 대해서 어떤 위치에 있는 view를 보여줄지 설정한다.
로그인 후 권한에 따라 보여지는 페이지
- 권한이 있는지 없는지 여부를 따진다.권한이 있다면 범위 안의 내용을 보여준다.
Spring Security에서 인증된 사용자 Spring MVC에서 확인
- 로그인 후 인증된 사용자 정보를 가져오는 태그는 authentication이며 인증된 사용자 정보는 principal에 저장되어있다.