서버 기반 인증 시스템은 로그인 시 세션ID를 클라이언트에게 발급해주고 클라이언트는 요청 시마다 세션 ID가 담긴 쿠키를 헤더에 담아 보내는 방식이다. 상태를 유지해야 하므로 Stateful한 구조이다.
**인증방식**
1. 클라이언트 로그인 요청 시 올바른 사용자임을 확인하고, 서버는 고유한 세션 ID 값을 부여하여 세션 저장소에 저장하고 사용자에게 발급해준다.
2. 클라이언트는 세션 ID를 받아 쿠키에 저장하고, 인증이 필요한 요청마다 쿠키에 세션 ID를 담아 헤더에 실어 보낸다.
3. 서버에서는 쿠키를 받아 세션 저장소와 올바른 요청인지 확인한다.
4. 인증이 완료되고 서버는 요청에 응답한다.
@PostMapping("/login")
public String loginResult(@Valid @ModelAttribute("loginDto") LoginDto loginDto,
Errors errors, HttpSession session, HttpServletResponse response) {
User findUser = userRepository.findByUserId(loginDto.getUserId());
if (findUser == null) {
return "user/loginForm";
} else {
if (findUser.getPwd().equals(loginDto.getPwd())) {
session.setAttribute("auth", loginDto);
} else {
errors.rejectValue("pwd", "notCorrectPwd");
}
}
}
**문제점**
JWT는 Json Web Token의 약자로 인증에 필요한 정보를 암호화시킨 토큰을 뜻한다. 세션/쿠키 방식과 유사하게 클라이언트는 Access Token(JWT)을 http Header
실어 서버로 요청한다.
사용자의 인증 정보를 더 이상 서버에 저장하지 않고 클라이언트의 요청으로만 인가를 처리할 수 있도록 Stateless 한 구조를 가진다.
기존의 인증 방법과 다르게 Token 기반 인증 시스템은 토큰 안에 유저의 정보를 넣는다는 점이다.
**JWT (JSON Web Token)**
**장점**
**단점**