이번글에서는 Spring Security의 Form Based Authentication에 대해 알아보도록 하겠습니다.
1. Form Based Authentication이란?
web application이 작성한 HTML 페이지에 credentails 정보를 입력해 사용자를 인증하는 방식입니다.
HTTP Basic Auth와 달리 사용자가 입력한 credential data는 POST 방식으로 web server에 전달되며, 전달된 form data를 사용해 인증을 구현하는 mechanism은 web application이 responsible을 가지게됩니다.
1-1) login process
login process는 다음과 같습니다.
• cleint가 접근이 제한된 GET /home request를 요청합니다.
• 인증되지 않은 사용자는 login html page로 redirect 됩니다.
• 사용자가 입력한 username + password 등의 form data는 POST 메서드를 통해 server로 전달됩니다.
• server는 전달된 post data를 사용해 authentication process를 수행한뒤, 정상적으로 인증된 사용자에 대한 Session ID를 생성합니다.
• Session Id가 정상적으로 생성되면, client에게 OK sign과 함께 auth cookie를 전달합니다. 이때 auth cookie에는 생성된 unique session id가 들어있습니다.
• 이후 client는 접근이 제한된 resource를 요청할 때 auth cookie를 함께 server에 전달해 인증된 사용자임을 server에 알립니다.
• server는 사용자가 전달한 auth cookie와 server에 저장되어 있는 session id를 비교해, 정상적으로 인증된 사용자일 경우에 200 과 함께 resource를 response 합니다.
1-2) logout process
logout process는 다음과 같습니다.
• 사용자가 logout url로 접근합니다.
• 서버는 해당 사용자의 session id를 server에서 expire 합니다.
• logout 된 사용자는 login page로 redirect 됩니다.
session id가 expire 되는 것은 logout 뿐만아니라, 일정시간이상 inactive한 session id에도 동일하게 적용됩니다. 😎
1-3) consideration
Form Based Authentication의 특징 및 주의점은 다음과 같습니다.
• 실제 인증을 수행하는 process는 application이 responsible을 가지게 됩니다.
• 보편적으로 가장 널리 쓰이는 인증방법입니다. 이러한 인증방법은 self-contained app에 적합합니다.
• user의 credentials data가 web application으로 전달되므로, SSL을 사용해 데이터의 전송을 안전하게 보호할 필요가 있습니다.
• form based authentication은 악의적인 사용자의 피싱사이트로 사용될 여지가 있습니다. 따라서 SSL을 사용하고, 인증된 기관의 certifiacte를 발급받아 이를 방지해야 합니다.
• 하나 이상의 endpoint를 필요로하는 public REST endpoints app에는 사용할 수 없습니다. form based authentication은 오직 self-contained app에만 적합한 인증방법입니다.
다시 한번 강조하지만, form based authentication은 self-contained app에만 사용할 수 있습니다. 😅
참고 자료 : https://www.youtube.com/playlist?list=PLVApX3evDwJ1d0lKKHssPQvzv2Ao3e__Q
추천서적
파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
'Spring > Security' 카테고리의 다른 글
[Spring Security] Default Configuration - Spring Boot (1) (0) | 2020.09.08 |
---|---|
[Spring Security] SSL & HTTPS (0) | 2020.09.08 |
[Spring Security] JWT Authentication (0) | 2020.09.08 |
[Spring Security] HTTP Basic Authentication (0) | 2020.08.31 |
[Spring Security] Authorities & Role (0) | 2020.08.31 |