스프링 시큐리티

Shaun·2021년 8월 13일
0

Spring Security

목록 보기
1/19

스프링 시큐리티는 처음이라 기존 Jpa를 포스팅 하는것처럼 많은 생략은 없을 예정이다.

스프링 시큐리티

  • 세션 기반의 예제로 사용자 정보는 서버에서 보관하고 필요한 경우에 설정을 통해서 제어하도록 구성한다.
  • 기본설정에 추가를 해준다.

  • 설정을 끝내준뒤 RUN을 하면 시큐리티 패스워드가 나올것이다.
  • localhost8080/login 으로 접속해주면 user라는 기본아이디와 제공받은 패스워드로 테스트 해볼수 있다.

시큐리티 클래스 작성

  • 시큐리티 관련 기능을 쉽게 설정하기 위해서 WebSecurityConfigurerAdapter라는 클래스를 상속 처리한다.

  • 테스트를 위한 코드들을 작성해준다.
  • 로그인을 하지않아도 누구나 볼수있는 /sample/all
  • 로그인 사용자만 볼수있는 /sample/member
  • 관리자 /sample/admin

스프링 시큐리티 용어와 흐름

/sample/all 호출할 경우 필터가 동작 하는것을 볼수있다.

스프링 시큐리티의 동작에는 여러 개의 객체가 서로 데이터를 주고받으면서 이루어진다. 기본구조는 다음과 같다.

1.Authentication Manager(인증 매니저) =핵심역활
2.Authentication provider=인증매니저가 어떻게 동작 해야하는지
3.UserDetailsService=실제 인증은 이것에 의해 이루어진다.

  • 스프링 시큐리티에서 가장 핵심 개념은 인증인가 이다.
    -인증이란 해당하는 작업으로 자신을 '증명'하는 것이다.
    -인가 란 일종의 '허가'를 해 주는 과정이다.

필터와 필터 체이닝

  • 스프링 시큐리티 필터 는 JSP 필터와 같은 개념이며 스프링의 빈과 연동할 수 있는 구조로 설계 되어있다.

  • 스프링의 여러 개의 필터가 필터 체이닝 이라는 구조로 Request를 처리하게 된다.

  • 개발 시에 필터를 확장하고 설정하면 스프링 시큐리티를 이용해서 다양한 로그인 처리가 가능하다.


-스프링 주요필터-

Authentication Manager(인증)

  • Authentication라는 타입의 객체로 작업을 한다
  • Authentication타입 파라미터
  • Authentication타입 리턴값
  • 실제로 검증하는 행위는 Authentication Manager 를 통해서 이루어진다.

실제 전달되는 파라미터는 토큰 이라는 이름으로 전달된다.
->스프링 시큐리티 필터의 주요 역활이 인증 관련된 정보를 토큰이라는 객체로 만들어서 전달한다는 의미이다.

실제코드(필터)

  1. 코드의 내용을 보면 request를 이용해 사용자의 아이디와 패스워드를 받아서

  2. UsernamePasswordAuthenticationToken이라는 객체를 만들고

  3. 이를 Authentication Manager의 authenticate() 에 파라미터로 전달한다.

Authentication Provider

  • 다양한 방식으로 인증처리 방법 제공

  • Authentication Provider는 전달되는 토큰의 타입을 처리할 수 있는 존재인지를 확인하고 authnticate()를 수행한다.

  • 내부적으로 UserDetailService를 이용한다.

  • UserDetailService는 실제로 인증을 위한 데이터를 가져오는 역활

인가 와 권한/접근 제한

  • 인증처리 단계가 끝나면 다음 동작 부분은 인가 이다.

  • 인증 단계에서 authenticate() 매서드의 리턴값은 Authentication 이라는 인증정보 이다.

  • 인증정보내에는 Rolese(권한) 에 대한 정보가 있다. 이 정보로 원하는 작업을 할수있는지 '허가'하게 되는데 이러한 행위를 Access-Contorl(접근 제한) 이라 한다.

로그인 과정

  • 사용자는 스스로를 인증 하기 위해서 아이디와 비밀번호를 입력한다.(Request)

  • 정보가 전달되면 AuthenticationManager 가 적절한AuthenticationProvider을 찾아서 인증을 시도한다.

  • AuthenticationProvider의 실제동작은 UserDetailsServic를 구현한 객체로 처리한다.

  • 인증이 완료되면 Authentication타입으로 리턴값을 전달환다.

  • 전달된 객체로 적절한 권한이 있는지 확인하는 인가 과정을 거친다. 문제가 없으면 화면을 보여준다.

profile
호주쉐프에서 개발자까지..

0개의 댓글