1. Spring Security
- 스프링 시큐리티는 스프링 기반의 애플리케이션의 보안(인증과 권한,인가 등)을 담당하는 스프링 하위 프레임워크이다. 스프링 시큐리티는 로그인 기능, 관리자 권한 등과 같은 기술을 좀 더 간편하게 구현할 수 있는 도구이다. 기존에는 세션과 인터셉터를 이용하여 개발자가 수동으로 관련 로직을 만들어야 했지만 스프링 시큐리티 기능을 이용하면 몇 가지 설정으로 기능을 구현할 수 있다.
- 스프링 시큐리티의 동작을 이해하기 위해서는 가장 중요한 용어인 인증(Authentication)과 권한(Authorization)에 대한 이해가 필요함
인증 : 자신을 증명하는 것
권한 : 자격이 부여된 것
AuthenticationManager(인증매니저 구조)
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 |