SpringSecurityV3

Shaun·2022년 1월 22일
1

Spring Security

목록 보기
7/19

Authentication Flow 인증 절차

  • AuthenticationProvider 에 username 과 password 를 담은 Authentication 객체가 들어오면 provider가 username 검증을위헤 loadUserByUserName()실행
  • 없으면 오류 필터에게 반환 / 있으면 UserDetetails 타입으로 반환한다. 그이후로는 pw도 비교한다

Authentication Manager

  • Authenticaiton provider 중에서 인증처리 조건에 맞는 provider를 선택해 인증처리 위임

  • Request에 해당하는 provider가 없으면 자식 ->부모 providerManager 에있는 provider까지 사용 가능, 인증한후에는 자기자신을 호출한 filter에게 결과값을 반환

  • AuthenticationManagerBuilder 를 사용해서 시큐리티 초기화 과정에서 설정한 기본 Parent 관계를 변경해야 권한필터 재인증시 모든 provider탐색 가능

    

Authntication Provider

  • AuthetnicationProvicder 는 두개의 메서드를 가지고 있다. 하나는 진짜 검증이 일어나는곳 다른하나 서포트. 두번째 메서드는 는 현재 폼인증 입력폼인증같은 인증을 처리할수 있는 조건이나 기준이 잇는지 확인

  • userDEtailsService 인터페이스에서 사용자 계정이 있는지없는지 확인, 있으면 userDetails 타입으로 변환뒤 authenticationprovider에게 다시전달

  • 패스워드는 유저네임 인증결과 userdetails 타입의 객체의 비밀번호와 사용자가 입력한 비밀번호 비교 (매치할때도 패스워드 인코더 사용)

  • 인증 다 성공하면 다시 authentication 객체에 담아 authenticatinManager 에게전달

  • Filter -> AuthenticationManager -> AuthenticationProvider -> AuthenticationManager -> Filter -> securityContext ->session

인가

  • 무엇이 허가 되었는지 증명 하는것

FilterSecurityInterceptor

  • exceptionTranslaterfilter 가 먼저 받는다. 다음 필터로 이동시 try catch로 해서 본내다. = 그 다음 필터에서 발생하는 모든 예외는 이 catch로 온다 exceptionTranslaterfilter filterinerceptor는 서로 상호보완적

  • 마지막에 있는 필터로써 사용자의 특정 요청에 대한 승인/거부를 최종적으로 결정

  • 인증 객체없이 접근시 AuthenticationException 발생

  • 인증 후 권한이 없으면 AccessDeniedException 발생

  • 권한 처리를 AccessDesicionManager 에게 맡김

  • SecurityMetadataSource = 사용자가 요청한 자원에 대한 권한정보를 가져온다

  • AccessDesicionManager = 여기서 사용자의 권한과 사용자가 요청한 자원의 권한비교 ( 사실상 voter에서 심의가 일어남!)

  • voter 를 직접구현해 새로운 처리방식 만들기 가능

AccessDecision Manager / voter

Voter가 권한 부여과정에서 판단하는 자료

  • Authentication -인증정보
  • FilterInvocation -요청정보
  • ConfigAttributes -권한정보
profile
호주쉐프에서 개발자까지..

0개의 댓글