스프링/Spring Security
인증 방법
내일도무사히
2021. 11. 9. 23:49
인가를 하는 방법은 크게 다음 세 가지로 나뉜다.
- Basic Auth
- Form Based Authentication
- JWT Token Verify
이 중에서 위의 두 가지인 Basic Auth와 Form Based Authentication을 정리하려고 한다.
📗 Basic Auth
다음과 같은 순서로 진행된다.
- 클라이언트가 인가(authorization)를 받지 않고 서버에게 원하는 자원에 대해 GET request를 보낸다.
- 서버는 클라이언트가 인가를 받지 않은 사용자이므로 401 Unauthorized Http 상태 메시지를 보낸다.
- 클라이언트가 Basic64로 암호화한 username과 password를 'request header'에 포함해 서버에게 전송한다
- 클라이언트가 보낸 정보가 올바른 정보라면 서버는 200 ok Http 상태 메시지를 보낸다.
- 그 뒤에 클라이언트가 서버에 요청을 보낼 때 마다 Basic64로 암호화한 유저 정보를 Request Header에 넣어 보내게 된다.
* 이 인증 방법은 가볍고 빠르지만 클라이언트가 요청을 보낼때마다 Request Header에 데이터를 전송해서 보내므로 logout을 시킬 방법이 없다는 단점이 있다.
* Spring Security에서는 HttpSecurity.httpBasic()을 통해 활성화 시킬 수 있다.
📗 Form Based Auth
다음과 같은 순서로 진행된다.
- 클라이언트가 자신의 정보를 POST 방식으로 보낸다.
- 서버는 정보가 맞는지 확인하고 맞다면 OK 메시지와 세션 정보를 보낸다.
- 클라이언트는 자신의 정보를 보낼때마다 SessionID를 함께 보낸다.
- 서버는 세션 아이디를 검증하고 맞다면 200 OK 상태 메시지를 보낸다.
- 가장 많이 쓰이는 인증 방법으로 Session을 활용하는 방법이다. 이름에서 알 수 있듯이 Form을 사용해서 인증을 하는 방식이며 서버측에서 가지고 있는 세션 정보를 지움으로써 로그아웃도 가능하다.
스프링 시큐리티에서는 HttpSecurity.authorizeRequests()를 통해 활성화 시킬 수 있다.
각각의 인증은 HTTPS를 사용하는것을 권장한다. 여유가 된다면 HTTPS를 사용하자.
References
https://www.youtube.com/watch?v=her_7pa0vrg&t=3196s