[TIL] 2020. 07. 29. Authentication

달밤·2020년 7월 29일
1

TIL

목록 보기
83/110
post-thumbnail

오늘 배운 것

Authentication

  • 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각. 쿠키는 클라이언트 측에 저장된다.
    1. 특정 호스트에서 생성된 쿠키는 이후 모든 요청마다 서버로 다시 전송
    2. 쿠키를 이용해서 서로 다른 두 요청이 동일한 브라우저에서 들어왔는지 판단할 수 있다.
      • 모든 요청시마다 부여받은 쿠키를 서버로 다시 전송하기 때문에 두 요청의 쿠키 내용이 다르면 서로 다른 브라우저라고 판단할 수 있을 것이다. 반대로 두 요청의 쿠키 내용이 같다면 동일한 브라우저의 요청이라고 판단 할 수 있다.
      • 이를 이용해서 사용자의 로그인 상태를 유지할 수 있으며, Stateless한 Http 프로토콜에서 상태 정보를 기억할 수 있는 수단으로 사용할 수 있다.
    3. 이름, 값, 만료 날짜, 경로 정보로 구성할 수 있으며, key-value쌍으로 저장한다.
    4. Node.js 기준 response.setHeader("set-cookie", <"key=value">)와 같은 명령문으로 사용할 수 있다.
  • 동작 순서
    1. 클라이언트가 페이지를 요청
    2. 서버가 쿠키를 생성해서 response의 헤더에 저장
    3. 클라이언트는 전달받은 쿠키를 로컬 PC에 저장하고, 다시 서버에 요청을 할 때마다 쿠키를 함께 전송

2. Session

  • 서버와 클라이언트의 연결이 활성화 된 상태
    1. 서버가 Client에 대해 유일한 ID(식별자)를 부여하여 서버 측에서 관리
    2. 일반적으로 Client ID가 서버에서 존재하는 상황을 Session이라고 칭함
      • 브라우저를 닫거나, 서버에서 세션을 삭제했을 때만 삭제가 된다.
    3. 사용자의 정보 중 보안상 중요한 데이터는 Session에서 관리함
  • 동작 순서
    1. 클라이언트가 페이지를 요청
    2. request의 cookie를 확인해 서버에 저장된 session-id와 일치하는 것이 있는지 확인한다.
    3. 일치하는 것이 있다면 이미 웹 서버에 이미 접속한 상태라고 판단한다.(로그인 상태)
    4. session-id가 없으면 새로 생성한뒤 cookie에 담아 보내주고 서버에 저장한다.
    5. seesion-id를 만들 때는 token과 같이 hashing 처리를 한다.

3. Token

  • 인증을 위해 사용되는 암호화 된 문자열
    1. 유저의 인증 정보를 직접 서버나 세션에 담아두기 보다는, 토큰을 저장하면 보안상 유리하다.
    2. Session을 확인할 때 요청에 담겨진 Token의 정합성만을 확인하면 된다.
    3. 서버에 클라이언트의 상태 정보를 저장하지 않고 클라이언트에서 넘겨지는 요청만으로 작업을 처리하게 되는데 이런 경우 클라이언트 상태관리에 관한 비용이 없기 때문에 서버의 확장성이 높다는 장점이 있다.

참고

  1. https://hahahoho5915.tistory.com/32
  2. https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies
profile
다 늦은 밤, 달밤의 개발일기

0개의 댓글