Spring 기본/개념

[Spring] Spring Security 기본 개념 요약 -1

줄라이퍼스트 2020. 8. 29. 23:12

 

1. Spring Security

- 스프링 시큐리티는 스프링 기반의 애플리케이션의 보안(인증과 권한,인가 등)을 담당하는 스프링 하위 프레임워크이다. 스프링 시큐리티는 로그인 기능, 관리자 권한 등과 같은 기술을 좀 더 간편하게 구현할 수 있는 도구이다. 기존에는 세션과 인터셉터를 이용하여 개발자가 수동으로 관련 로직을 만들어야 했지만 스프링 시큐리티 기능을 이용하면 몇 가지 설정으로 기능을 구현할 수 있다.

 

- 스프링 시큐리티의 동작을 이해하기 위해서는 가장 중요한 용어인 인증(Authentication)권한(Authorization)에 대한 이해가 필요함

인증 : 자신을 증명하는 것

권한 : 자격이 부여된 것

 

AuthenticationManager(인증매니저 구조)    

 

                  

이미지출처 -  https://docs.gigaspaces.com/latest/security/introducing-spring-security.html

 

1. providerManager는 인증에 대한 처리를 AuthenticationProvider라는 타입의 객체를 이용해서 처리를 위임함.

 

2. AuthenticationProvider(인증 제공자)는 실제 인증작업을 진행

  -> 인증된 정보에는 권한에 대한 정보도 같이전달하게 됨 이 처리는 UserDetailsService라는 존재와 관련이 있음  UserDetailsService 인터페이스의 구현체는 실체로 사용자의 정보와 사용자가 가진 권한의 정보를 처리해서 반환

 

2. 접근 제한 설정

- 스프링 시큐리티 내부구조는 복잡하긴하지만 약간의 설정만으로 처리가 가능

  ex) URI에 대한 접근 제한을 통해 스프링 시큐리티 적용

 

1. security-context.xml에 접근제한을 설정

<security:http>
	<security:intercept-url pattern="경로입력" access="permitAll"/>
    <security:intercept-url pattern="경로입력" access="hasRole('ROLE_MEMBER')"/>
	<security:form-login"/><!--'ROLE_MEMBER' 권한이 없을시 로그인 페이지로 강제이동-->
</security:http>

- 특정 URI에 접근할 때 인터셉터를 이용해서 접근제한 설정은 <security:intercept-url>을 이용

   -> pattern이라는 속성과 access라는 속성을 지정해야만함 pattern속성은 URI 패턴의미       access의 경우 권한을 체크

3. CSRF 공격과 토큰

- 스프링 시큐리티를 사용하게되면 POST 방식을 이용하는 경우 기본적으로 CSRF 토큰이라는 것을 이용 

  -> 사이트간 위조 방지 목적 (특정한 값의 토큰을 사용)

  

- form 태그 이용해서 post방식을 이용한경우

<form role="form" action="/sp/signUp" method="post" >
	<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> <!-- post방식으로 전송시 이와같이 토큰을 사용해야함  -->								                     		 
    	<div class="form-group">
        	<button type="submit" name="submit" id="submit" class="form-submit" >Sign up</button>
         </div>
</form>       

  - csrf 토큰을 input type을 hidden을 이용하여 작성

4. 스프링 시큐리티 표현식

표현식 설명
hasRole([권한])
hasAuthority([권한])
해당 권한이 있으면 true
hasAnyRole([권한1, 권한2])
hasAnyAuthority([권한])
여러 권한들 중에서 하나라도 해당하는 권한이 있으면 true
principal 현재 사용자 정보를 의미
permitAll 모든 사용자에게 허용
denyAll 모든 사용자에게 거부
isAnonymous() 익명의 사용자의 경우(로그인을 하지 않은 경우도 해당)
isAuthenticated() 인증된 사용자면 true
isFullyAuthenticated() Remember-me로 인증된 것이 아닌 인증된 사용자인 경우 true

 

 

'Spring 기본 > 개념' 카테고리의 다른 글

[Spring] 기본개념 - 2  (0) 2020.09.24
[Spring] 기본개념 - 1 간단요약  (0) 2020.08.29