[TIL] 2020. 07. 29. Authentication
오늘 배운 것
Authentication
1. Cookie
- 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각. 쿠키는 클라이언트 측에 저장된다.
- 특정 호스트에서 생성된 쿠키는 이후 모든 요청마다 서버로 다시 전송
- 쿠키를 이용해서 서로 다른 두 요청이 동일한 브라우저에서 들어왔는지 판단할 수 있다.
- 모든 요청시마다 부여받은 쿠키를 서버로 다시 전송하기 때문에 두 요청의 쿠키 내용이 다르면 서로 다른 브라우저라고 판단할 수 있을 것이다. 반대로 두 요청의 쿠키 내용이 같다면 동일한 브라우저의 요청이라고 판단 할 수 있다.
- 이를 이용해서 사용자의 로그인 상태를 유지할 수 있으며, Stateless한 Http 프로토콜에서 상태 정보를 기억할 수 있는 수단으로 사용할 수 있다.
- 이름, 값, 만료 날짜, 경로 정보로 구성할 수 있으며, key-value쌍으로 저장한다.
- Node.js 기준
response.setHeader("set-cookie", <"key=value">)
와 같은 명령문으로 사용할 수 있다.
- 동작 순서
- 클라이언트가 페이지를 요청
- 서버가 쿠키를 생성해서 response의 헤더에 저장
- 클라이언트는 전달받은 쿠키를 로컬 PC에 저장하고, 다시 서버에 요청을 할 때마다 쿠키를 함께 전송
2. Session
- 서버와 클라이언트의 연결이 활성화 된 상태
- 서버가 Client에 대해 유일한 ID(식별자)를 부여하여 서버 측에서 관리
- 일반적으로 Client ID가 서버에서 존재하는 상황을 Session이라고 칭함
- 브라우저를 닫거나, 서버에서 세션을 삭제했을 때만 삭제가 된다.
- 사용자의 정보 중 보안상 중요한 데이터는 Session에서 관리함
- 동작 순서
- 클라이언트가 페이지를 요청
- request의 cookie를 확인해 서버에 저장된 session-id와 일치하는 것이 있는지 확인한다.
- 일치하는 것이 있다면 이미 웹 서버에 이미 접속한 상태라고 판단한다.(로그인 상태)
- session-id가 없으면 새로 생성한뒤 cookie에 담아 보내주고 서버에 저장한다.
- seesion-id를 만들 때는 token과 같이 hashing 처리를 한다.
3. Token
- 인증을 위해 사용되는 암호화 된 문자열
- 유저의 인증 정보를 직접 서버나 세션에 담아두기 보다는, 토큰을 저장하면 보안상 유리하다.
- Session을 확인할 때 요청에 담겨진 Token의 정합성만을 확인하면 된다.
- 서버에 클라이언트의 상태 정보를 저장하지 않고 클라이언트에서 넘겨지는 요청만으로 작업을 처리하게 되는데 이런 경우 클라이언트 상태관리에 관한 비용이 없기 때문에 서버의 확장성이 높다는 장점이 있다.
참고
- https://hahahoho5915.tistory.com/32
- https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies