
서비스에서 사용자의 신원을 검증하고 식별된 사용자에 맞춰 서비스를 제공하기 위해서는 별도의 검증 프로세스가 필요하다.
"너 누구야?"를 확인하는 과정
사용자가 누구인지 신원을 확인하는 절차이다.
과정 흐름
1. 사용자가 로그인 요청
2. 서버가 비밀번호/토큰 확인
3. 맞으면 -> 인증 성공
4. 틀리면 -> 인증 실패
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody LoginDto dto) {
authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(dto.getUsername(), dto.getPassword())
);
}
// 인증은 신원 확인이다.
"그래서 이 사람이 이걸 해도 돼?"를 확인하는 과정
이미 인증된 사용자가 특정 자원에 접근할 권한이 있는지를 확인하는 과정이다.
@PreAuthorize("hasRole('ADMIN')")
@GetMapping("/admin")
public String adminPage() {
return "관리자 페이지";
}
// 인가는 권한 확인이다.
현대적인 온라인 서비스들은 대부분 인증과 인가를 기반으로 운영된다. 또한 대부분의 웹/앱 서비스들은 HTTP 프로토콜을 사용하여 통신한다. HTTP 프로토콜은 비연결성(Connectionless), 무상태(Stateless)의 특징을 지니기 때문에, 최초 로그인을 한 이후 서버에서 클라이언트에 이전 상태를 기억하고 있지 않다.