인증이란 사용자가 누구인지를 확인하는 절차이다.
보통 Spring에서는 DB에 등록된 사용자와 일치하는지를 증명하는 과정이다.
웹사이트에서 ID,PWD를 입력하여 로그인하는것, 스마트폰 잠금을 FACEID같은 방식으로 해제하는것 등이 전부 인증에 해당된다.
즉, 인증이란 쉽게 말해 로그인과 같다고 생각하면 좋다.
인가는 인증된 사용자만 특정 기능이나 정보등에 접근할수 있는 권한이 있는지를 확인하는 절차이다.
예를 들어, 관리자는 다른 사용자가 작성한 게시글을 삭제할 수 있다던가, 유투브 구독을 구매한 사용자면 회원전용 비디오를 시청할 수 있다라는 것들이 전부 인가에 해당한다.
즉, 인가는 권한이라고 생각하면 좋다.
세션이란 서버에서 유저의 로그인 상태를 기억하는것이다.
세션의 동작 방식은 다음과 같다.
고유세션ID를 할당해준다. 그렇게 할당한 ID를 서버의 메모리나 DB에 저장한다.쿠키에 저장한다.쿠키에 담긴 ID값을 함께 전달해주고, 서버는 그 ID를 통해 사용자를 식별하게된다.쉽게 말해, 사용자가 로그인을 성공하면, 고유한ID를 생성하여 서버측에서 저장해주고 기억해주는것이다.
장점
단점
Session이 서버에 로그인 상태를 저장한다면, JWT는 그 반대로 서버에 로그인 상태를 저장하지 않는 stateless 인증 방식이다. 유저는 요청을 할때마다 JWT에 인증정보를 담아 전달한다.
JWT의 동작 흐름은 다음과 같다.
사용자가 로컬 저장소나 쿠키에 저장한다.장점
단점