인증이 필요한 이유
- HTTP 프로토콜의 특징으로 인해 필요하다.
- 비연결성
- 클라이언트가 서버에 요청을 하고나서 그에 걸맞는 응답을 보낸 후 서버와 클라이언트의 연결을 끊음
- 무상태성 (Stateless)
- 연결이 끊긴 이후 서버가 어떠한 상태정보를 유지하지 않는 특성
→ 실제로는 데이터 유지를 하는 경우가 종종 있음
인증의 기본 동작 방식
- 인증 : 사용자가 누구인지 확인하는 절차 (ex. 로그인)
- 클라이언트가 ID/PW 를 서버에 전송한다.
- 서버는 ID/PW 를 기반으로 사용자 정보를 인증한다.
- 인증된 사용자 정보를 기반으로 인증 정보를 생성한다.
- 인증 정보를 클라이언트에게 전송한다.
- 이후 요청에 대해서 클라이언트는 인증 정보를 활용하여 요청한다.
계정 정보를 요청 Header 에 넣는 방식
- 절대 이렇게 하면 안됩니다.
보통 앱에서는 서버로 HTTP 요청을 할 때 따로 암호화 되지 않으므로, 해커가 HTTP 요청을 가로채서(intercept) 사용자의 계정정보를 알 수 있습니다.
Session / Cookie 방식
- Session/Cookie 방식 인증은 기본적으로 세션 저장소를 필요로 합니다.
- 세션 저장소는 로그인시 사용자 정보를 저장하고, 열쇠로 사용할 수 있는 세션 ID 를 만듭니다.
- 그리고 HTTP 헤더에 실어 클라이언트에게 보냅니다.
- 브라우저는 세션 ID 를 포함하는 쿠키를 저장하고있습니다.
- 인증이 필요한 요청에 해당 쿠키를 끼워 서버에 request 를 보냅니다.