로그인은 무엇인가?
로그인은 클라이언트가 접근허가 증명을 위해 자기 자신을 증명하는 것입니다.
로그인은 어떻게 할 수 있을까?
HTTP는 Connectionless, Stateless인데
- 비연결성이란 클라이언트가 요청을 하고 서버가 해당 요청에 응답을 하게 되면 연결이 끊어집니다.
이 특징으로 상태가 없게 됩니다. 그래서 클라이언트가 동일한 요청을 보내더라도 인증을 계속 해야 합니다.
평소에 생각하던 로그인과 정보 요청 방법이 아닌데 어떻게 가능 한지 궁금했습니다.
서버 기반(Session) / Token 인증이있다!
Session, Token인증에 관해 자세한 설명은 인터넷에 워낙 자료 정리가 잘되어있으니까요!
내가 Token 인증을 선택한 이유
- 세션은 데이터를 저장하지 않습니다. 그래서 정보를 꺼내기 위해 매번 데이터베이스를 조회해야한다.
- Oauth로의 확장을 위해서입니다 (예를 들어 구글로그인, 페이스북 로그인 등)
- 쿠키는 발행한 서버에서만 유용하지만 토큰은 html body의 형태로 전달하기 때문에 다른 도메인에서도 사용 할 수 있다.
JWT 인증 흐름
- 엑세스 토큰을 얻기 위해 클라이언트는 요청 본문에 아이디와 패스워드로 요청 합니다.
- 서버는 사용자의 아이디와 패스워드의 유효성을 검사 한 다음에 엑세스 토큰을 반환 합니다.
- 요청마다 헤더에 JWT 토큰을 함께 보냅니다.
- 유효성 검사 후 응답 합니다.
스프링에서 JWT를 사용하려면 Spring security 필수!
스프링 시큐리티 Docs 블로그 많은 예제들이 있지만 제대로 사용하기 위해서는 공식문서를 정독하고 사용해야한다.