Ajax 인증

Shaun·2022년 2월 9일
1

Spring Security

목록 보기
11/19

Ajax


  • 순서는 form 인증 방식과 거의 흡사하다.

  • Filter 에서 요청 받고 -> autehnticationManager가 인증정보 넘기고 ->AuthenticationProvider -> authentication manager -> filter ->handler

  • Ajax를 사용하기위해 조건을 걸어두자.

1.특정URL로 요청하고 요청방식이 Ajax이면 필터 작동
2.AbstractAuthenticationProcessingFilter상속
3.Filter추가
4.CSRF 설정

Ajax인증 방식 VS Form 인증 방식

  • 두 방법은 많이 비슷 하지만 Form방식은 동기, Ajax방식은 비동기 라는 차이점이 있다.

  • form 인증 방식처럼 Redirect 응답하는게아니라 데이터를 담어서(objectmapper) json형식으로 바디에 담아서 클라에게 응답하는게 가장 큰 차이점 이다.

AjaxAuthenticationFilter

  • ObjectMapper = Json으로 온 데이터를 객체로 만들어준다

  • 인증 실패시 오류를 출력하도록 했다. 인증 성공시에는 토큰에 결과 값을 담아 반환한다.

Ajax-token

  • form태그와 유사하며, 인증 성공시 토큰에 결과값을 담아 반환하는것도 유사하다. 그러므로 UsernamePasswordAuthenticationToken을 복사해서 사용한다.

  • 저번 form토큰 만들때와 똑같이 첫번째 생성자는 인증 받기전 클라가보낸 userName과 password가 들어간 생성자, 두번째는 인증후 결과값이 들어간 생성자다.

  • 인증받기전 인 첫번째 토큰 생성자를 사용하며 값을 담은뒤 똑같이 AuthenticationManager에게 전달해 인증 처리를 시작한다

  • @Bean 으로 추가해주고 ajax config 설정해준다

  • authenticationManager 설정도 잊지말자

  • AjaxProcessingFilter를 UsernamePasswordAuthenticationFilter보다 앞에 위치 시킨다.

addFilterBefore =기존필터 앞에 위치
addFilter = 가장 맨마지막에 위치할떄
addFilterAfter = 지금 추가하는 필터가 기존필터 뒤쪽
addFilterAt =기존필터위치를 대체하고자

  • post방식은 csrf 여부검사를 하는것도 잊지말자

AjaxAuthenticatinProvider

  • AjaxProcessingFilter 에서 클라이언트가 입력한 userName과 password를 받아 AuthenticationManager에게 이값들을 Ajax용 토큰 에 담아 보내준다.

  • form 인증 방식과 거의 흡사하다.

  • 다만 provider에 들어오기전 토큰(supports메서드, 위 processingFilter 에서 온 토큰)와 인증이 끝나고난뒤 나오는 인증결과 토큰을 Ajax용으로 만들어주자

  • SpringSecurity가 우리가 만든 proivder를 사용할수 있도록 config에 추가해주자!

AjaxAuthenticationSuccessHandler

  • form 인증 방식과 비슷하지만 가장큰 차이점은 redirect로 보내주는게아니라 objectMapper을 사용해서 인증성공한 데이터를 Json형식으로 바디에 담아 클라이언트에게 보내준다

AjaxAuthenticationFailureHandler

  • form인증 방식과 흡사하게 해당 상황에 맞는 메세지를 출력하도록 작성 하였다.

  • 마지막으로 역시나 시큐리티가 사용할수있게 config에 설정을 해주자!

인증성공후 권한 문제

AjaxLoginAuthenticationEntryPoint

  • 인증이 필요한 자원에 인증을 받지 않는 사용자가 접근할경우

AjaxAccessDeniedHandler

  • 인증은 했지만 권한을 넘는 자원에 접근할경우

  • 시큐리티가 사용할수있게 config에도 설정해준다.
profile
호주쉐프에서 개발자까지..

0개의 댓글