[Spring Security] Form Based Authentication

dev-log·2021년 9월 26일
0

Form Based Authentication이란?

web application이 작성한 HTML 페이지에 credentails 정보를 입력해 사용자를 인증하는 방식이다.

HTTP Basic Auth와 달리 사용자가 입력한 credential data는 POST 방식으로 web server에 전달되며, 전달된 form data를 사용해 인증을 구현하는 방식은 web application이 책임을 가지게된다.
(HTTP에 의존하는 것이 아니기 때문에 우리가 코드와 로직을 작성해야 한다.)

login 동작 순서

  1. cleint가 접근이 제한된 GET /home request를 요청한다.

  2. 인증되지 않은 사용자는 login html page로 redirect 된다. (팝업x)

  3. 사용자가 입력한 form data(username + password 등)는 POST 메서드를 통해 server로 전달된다.

  4. server는 전달된 post data를 사용해 authentication process를 수행한뒤, 정상적으로 인증된 사용자에 대한 Session ID를 생성한다.
    ( session id가 정상적으로 생성되면, client에게 OK sign과 함께 auth cookie를 전달한다.(auth cookie는 session id를 담고 있다.)

  5. 이후 client는 접근이 제한된 resource를 요청할 때 auth cookie를 함께 server에 전달해 인증된 사용자임을 server에 알린다.

  6. server는 사용자가 전달한 auth cookie와 server에 저장되어 있는 session id를 비교해, 인증된 사용자인 경우 200 과 함께 resource를 response한다.

logout 동작 순서

HTTP basic auth와 다르게 Form Based auth는 logout을 구현할 수 있다.

  1. cleint가 GET /logout request를 요청한다.

  2. 서버는 해당 사용자의 session id를 server에서 만료시킨 후
    logout 된 사용자를 login page로 redirect 한다.
    (일정 시간이 지난 inactive session id도 똑같은 방식으로 만료된다.)

Form Based Authentication의 특징 & 주의 사항

• 실제 인증을 수행하는 방식은 application이 책임을 가진다.
(HTTP basic Auth보다 동작 방식이 복잡해보이지만 spring security가 많은 부분을 대신해준다.)

• 요즘 가장 많이 쓰이는 인증방법이다. 이러한 인증방법은 self-contained app에 적합하다.

• 데이터 보호를 위해 SSL또는 HTTPS를 사용해 데이터의 전송해야 한다.

• form based authentication은 우리의 웹 사이트와 아주 유사한 가짜 사이트로 사용자의 정보를 입력받아 훔칠 수 있으므로 SSL을 사용하고, 인증된 기관의 certifiacte를 발급받는 것이 좋다.

• public REST endpoints app에는 맞지 않는다. form based authentication은 오직 self-contained app에만 적합한 인증 방법이다.

Reference

https://youtu.be/YMiAgD6sfyU
https://minholee93.tistory.com/entry/Spring-Security-Form-Based-Authentication?category=924032

profile
배운 걸 기록하는 곳입니다.

0개의 댓글