인증(Authentication)
사용자가 자신이 주장하는 신원(Identity)을 증명하는 과정입니다. 일반적으로 아이디와 비밀번호를 입력하여 로그인하는 과정이 인증에 해당합니다. 사용자가 시스템에 접근할 수 있는 권한을 가지고 있는지를 확인하는 단계.
인가(Authorization)
인증된 사용자에게 특정 리소스 또는 기능에 대한 접근 권한을 부여하는 과정입니다. 인가는 인증된 사용자에 대해 어떤 작업을 수행할 수 있는지 결정합니다. 예를 들어 관리자 페이지-관리자 권한 같은 것들을 들 수 있습니다.
우리가 자주 하는 로그인은 인증을 할 때(비밀번호 입력하고 제출 할 때)이고
회원/비회원 여부에 따라 다른 권한을 받는 것이 인가입니다.
인증 방식
1. 쿠키-세션 방식의 인증
쿠키-세션 방식은 서버가 ‘특정 유저가 로그인 되었다’는 상태를 저장하는 방식입니다.
인증과 관련된 아주 약간의 정보만 서버가 가지고 있게 되고 유저의 이전 상태의 전부는 아니더라도
인증과 관련된 최소한의 정보는 저장해서 로그인을 유지시킨다는 개념입니다.

- 사용자가 로그인 요청을 보냅니다.
- 서버는 DB의 유저 테이블을 조회하여 아이디 비밀번호를 대조
- 실제 유저테이블의 정보와 일치한다면 인증을 통과한 것으로 보고 “세션 저장소”에 해당 유저가 로그인되었다는 정보를 넣습니다.
- 세션 저장소에서는 유저의 정보와는 관련 없는 난수인 session-id를 발급합니다.
- 서버는 로그인 요청의 응답으로 session-id를 내어줍니다.
- 클라이언트는 그 session-id를 쿠키라는 저장소에 보관하고 앞으로의 요청마다 세션아이디를 같이 보냅니다. (주로 HTTP header에 담아서 보냅니다)
- 클라이언트의 요청에서 쿠키를 발견했다면 서버는 세션 저장소에서 쿠키를 검증합니다.
- 만약 유저정보를 받아왔다면 이 사용자는 로그인이 되어있는 사용자
- 이후에는 로그인 된 유저에 따른 응답을 내어줍니다.
2. JWT 기반 인증
JWT(JSON Web Token)란 인증에 필요한 정보들을 암호화시킨 토큰을 의미합니다. JWT 기반 인증은 쿠키/세션 방식과 유사하게 JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별합니다.

- 사용자가 로그인 요청을 보냅니다.
- 서버는 DB의 유저 테이블을 조회하여 아이디 비밀번호를 대조
- 실제 유저테이블의 정보와 일치한다면 인증을 통과한 것으로 보고 유저의 정보를 JWT로 암호화해서 내보냅니다.
- 서버는 로그인 요청의 응답으로 jwt 토큰을 내어줍니다.
- 클라이언트는 그 토큰을 저장소에 보관하고 앞으로의 요청마다 토큰을 같이 보냅니다.
- 클라이언트의 요청에서 토큰을 발견했다면 서버는 토큰을 검증합니다.
- 이후에는 로그인 된 유저에 따른 응답을 내어줍니다.
'Spring' 카테고리의 다른 글
| Spring Day 12 : @AuthenticationPrincipal (0) | 2024.02.05 |
|---|---|
| Spring Day 11 : 로그인 성공 시 메세지와 StatusCode (0) | 2024.02.02 |
| Spring Day 9 : JPA Auditing (0) | 2024.01.30 |
| Spring Day 8 : Dirty Checking (0) | 2024.01.29 |
| Spring Day 7 : 영속성 콘텍스트 (0) | 2024.01.26 |