Spring-diary/WEB

Spring Security

reallygeorge? 2020. 2. 24. 12:12

정의 

  • 스프링 기반의 보안을 담당하는 스프링 하위 프레임워크
  • 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를 등록한다.

리소스의 권한 Intercept
web.xml 등록

  • security와 관련된 context파일 설정을 해준다. Pom.xml 설정을 제대로 해주었다면 namespace에 
    security항목이 보일 것인데 security를 체크해준다.

인증단계

설정1:Authorization은 대부분의 설정이 http에 위치해 있다.true로 설정해 줌으로써 기본 설정 값으로 서버를 구성해준다.
DelegatingFilterProxy에서 가로챈 요청을 좀 더 세부적으로 나누며(pattern) 접근 할 수 있는 권한(access)를 설정한다.
권한에 따른 접근 제어

권한부여단계

  • 권한을 부여하기 위해 권한이란 것을 설정해준다. http 태그는 인증 범위에 들어가고 권한부여는 
    <authorization-manager>가 담당한다.

이 태그 안에 여러가지 설정들을 넣어준다.
하위에 권한을 설정해준다 id와 pwd를 명시해준다. 하나에 두개의 권한을 부여할 수도 있다. 권한 부여시 항상 ROLE_을 붙여줘야한다. 권한을 부여하는 RoleVoter에서 ROLE_접두어가 없으면 접근 보류로 설정하기 때문이다.

 

로그인커스터마이징

  • 로그인 페이지를 커스터마이징할 수 있다.form-login 태그를 사용한다. 

form-login 속성들

login-page 로그인 요청시 이동할 URL 설정
username-parameter 로그인 id 파라미터명 설정
password-parameter 비밀번호 파라미터명 설정
login-processing-url form에서 전송할 URL 설정

 

  • 로그아웃은 logout 태그를 사용한다. 

JSESSIONID는 TOMCAT에서 주어지는 쿠키 이름이다.

login 속성들

invalidate-session session을 무효화시킬지 결정하는 속성
logout-url 로그아웃 요청시 이동할 url
logout-success-url 로그아웃 성공시 이동할 url

로그인과 로그아웃 controller

  • spring에서 error가 나면 error 정보를 보내오고 logout을 하면 logout 정보를 보내온다.

로그인
로그아웃

에러페이지 사용자 커스텀

  • 에러페이지를 사용자가 지정할 수 있다. web.xml에 각 에러에 대해서 어떤 위치에 있는 view를 보여줄지 설정한다.

404와 500처리
위치설정에 맞도록 view 작성

로그인 후 권한에 따라 보여지는 페이지

 

  • 권한이 있는지 없는지 여부를 따진다.권한이 있다면 범위 안의 내용을 보여준다.

설정
권한이 있다면 로그아웃이 보이게 된다.

 

Spring Security에서 인증된 사용자 Spring MVC에서 확인

  • 로그인 후 인증된 사용자 정보를 가져오는 태그는 authentication이며 인증된 사용자 정보는 principal에 저장되어있다.

설정
principal
jstl등과 결합해 사용할 수 있다.