1. 핵심 학습 키워드
웹 인증
- 웹 애플리케이션에서 사용자의 정체를 확인하고(인증), 그에 따른 적절한 권한을 부여(인가)하는 과정을 의미.
- 로그인 인증에는 다양한 방식이 존재한다.
- ID / PW 기반의 로그인
- 소셜 로그인(Oauth2)
- 이메일 인증
- 휴대폰 인증
- MFA(다중 인증요소)
- 위와 같은 방법을 인증하는 방식은 크게 세션 / 쿠키, JWT를 활용해서 하는 것이 일반적이다.
1-1 HTTP 세션
- 웹 애플리케이션에서 세션 공간에 사용자 정보를 일정 시간 동안 저장하는 기술.
- HTTP session은 HTTP 프로토콜의 Stateless한 문제로 인해 요청 시 마다 정보롤 다시 보내는 문제를 해결하기 위해서 서버측에서 저장하고 관리하는 session ID를 발급한다.
- 주로 쿠키를 사용해서 구현된다.
- 사용자가 다시 접속해도 유지된다.
- 서버에서 관리되므로 임의로 사용자가 정보 조작 하기는 어려우며 HTTPS를 통해 암호화해 전송한다.
- 웹 애플리케이션에서 사용하는 인증 방식으로 모바일에서는 사용하기 어렵다.
- 일반적으로 인증 과정은 다음과 같다.
- 사용자가 로그인을 시도한다.
- 사용자의 인증 정보를 검증해서 session id를 서버측에 생성한다.
- 서버에서 갱신 및 정보 변경이 가능하다.
- 세션 ID는 쿠키 방식으로 사용자에게 전달된다.
1-2 HTTP 쿠키
- 웹 브라우저와 웹 서버 간의 상태 정보를 유지하기 위한 기술이다. 쿠키는 사용자의 로컬에 저장하고 필요할 때마다 서버에 전송해 사용자 상태 정보를 유지한다.
- 쿠키는 HTTP 헤더의 Set-Cookie 같은 헤더를 통해 사용자에게 전달됨.
- 쿠키는 키 값 쌍으로 이루어져 있으며 이름, 값, 유효 기간 등의 정보를 포함한다.
- 쿠키의 특징은 다음과 같다.
- 쿠키는 사용자 측(클라이언트)에 저장되며 서버가 사용자의 상태 정보를 확인하기 위해서는 클라이언트로부터 쿠키를 전달받아야 합니다.
- 쿠키는 유효 기간을 지니고 있으며 지나면 삭제됩니다.
- 쿠키는 보안 문제가 있으므로 민감한 정보는 저장하지 않습니다.
- 쿠키는 브라우저에서 관리되기 때문에 다른 브라우저에서는 이를 사용할 수 없음.
- 쿠키는 보안적인 문제 때문에 보완적으로 사용한다.
- 사용자가 로그인 정보를 입력한다.
- 서버는 검증후 인증이 성공하면 고유 ID와 함께 인증 토큰을 생성한다.
- 그 인증토큰을 응답 헤더에 포함해서 사용자에게 전송한다.
- 전송받은 토큰을 로컬에 저장합니다.
- 클라이언트는 서버에 요청을 이후 할때마다 인증 토큰을 헤더에 포함해서 보내게 되고, 서버는 그 토큰을 검증해 인증 성공시에 요청에 대한 정상적인 응답을 생성한다.
1-3 HTTP Header
- 서버 클라이언트 간의 인증을 HTTP 헤더를 통해 사용
- Http Basic, Http Digest, Oauth와 같은 프로토콜을 통해 구현됨.
- 웹도 많이 사용하지만 앱에서도 많이 사용
- 사실 세션이든 쿠키든 결국 `헤더에 담겨서 인증한다.`
- 인증 방식에 따라 세션 쿠키, 일반 쿠키 인증, 혹은 별도에 header에 값을 집어넣어서 인증하는 HTTP Header 인증이다.
1-4 JWT Token
- JWT(JSON Web Token)은 웹 표준으로써, 데이터의 JSON 객체를 사용해 가볍고 자가 수용적인 방식으로 안전하게 정보 전달을 위해 설계된 토큰 기반 인증 방식이다.
- JWT는 URL, Header, Form 등 다양한 방식으로 전달 가능하다.
- JWT는 Header, Payload, Signature 세 부분으로 구성됨.
- `Header` : JWT의 타입과 암호화 알고리즘 등을 포함하며 JSON 형식으로 인코딩된다.
- `Payload` : 클레임 정보를 포함하며 JSON 형식으로 인코딩됨. 클레임 정보는 사용자 ID, 권한 등의 정보를 포함할 수 있다.
- `Signature` : Header와 Payload를 조합한 후 , 비밀키를 사용해 생성된 서명 값이다. 서명 값은 토큰의 무결성을 보장하며 JWT를 조작하지 않았음을 검증한다.
- JWT 인증 방식
- 클라이언트가 서버에 로그인 요청을 보냄.
- 서버는 로그인 요청을 검증하고, 유효한 사용자라면 JWT를 생성해 클라이언트에게 반환한다.
- 클라이언트는 이후 요청에 JWT를 포함시켜 전송한다.
- 서버는 JWT를 검증하여, 클라이언트의 인증 여부를 판단합니다.
- 장점
- 토큰 기반 인증 방식이므로 서버측에서 별도의 세션 저장소를 유지할 필요가 없음.
- JSON 형식으로 인코딩되므로 다양한 플랫폼 간에 쉽게 전송 및 구현할 수 있다.
- Signature를 사용해 무결성을 보장하므로, 토큰이 변조되었는지 쉽게 검증 가능하다.
- 단점
- JWT의 크기가 커지면 네트워크 대역폭이 증가한다.
- 한번 발급된 후에는 내부 정보를 수정할 수 없으므로, 만료 시간을 짧게 설정해야 한다.
- 탈취당하면 해당 토큰을 사용한 모든 요청이 인증 되므로 보안 위협이 될 수 있다. 따라서 HTTPS와 같은 보안 프로토콜을 사용해서 JWT를 전송해야 한다.
'Web Programming' 카테고리의 다른 글
[Spring Batch] Spring Batch 간단 정리 (0) | 2024.12.23 |
---|