codingBird

[HTTP 완벽가이드] 11장 클라이언트 식별과 쿠키, 12장 기본 인증 본문

북클럽

[HTTP 완벽가이드] 11장 클라이언트 식별과 쿠키, 12장 기본 인증

김뚜루 2023. 7. 25. 23:06

11장. 클라이언트 식별과 쿠키

  1. 사용자 식별은 무엇을 통해 할 수 있는가? (책에 기술된 5가지)
    1. IP 주소
    2. 접속한 브라우저의 종류? 버전? 정보 (User-Agent 헤더)
    3. 사용자 로그인을 통한 사용자 식별
    4. URL: 사용자 식별자를 URL에 포함시킨다.
    5. 쿠키: 쿠키에 사용자 식별자를 포함시켜 응답으로 전달하고, 클라이언트는 차후 요청에 전달받은 쿠키를 포함시킨다.
  2. 클라이언트 IP 주소가 사용자 식별에 적합하지 않는 이유는 무엇인가?
    1. 요청이 서버에 전달되는 과정에서 IP 주소가 변경될 수 있음.
    2. 프록시 서버에서 요청을 받아 프록시 서버가 서버에 요청을 전달하는 경우, 서버는 프록시 서버의 IP주소를 전달받게 되어 클라이언트를 식별할 수 없음.
    3. 서로 다른 클라이언트라 할지라도 방화벽 등 게이트웨이를 거치는 과정에서 공통된 IP로 전달될 수 있음.
    4. IP는 컴퓨터를 식별하므로, 다른 사용자가 동일한 컴퓨터로 접속할 경우 동일한 사람으로 식별됨.
    5. 사용자 IP가 ISP로 인해 변동되는 경우가 있음 (유동 IP)
  3. 사용자 인증 흐름에 대해 설명해보거라.
    1. 클라이언트는 사용자 인증이 필요한 리소스를 서버에 요청한다. GET /inus
    2. 서버는 요청에 리소스 접근에 필요한 인증 정보가 없는 것을 보고 401 Unauthorized 응답을 보낸다.
    3. 401 응답을 받은 클라이언트는 Authorization 헤더에 인증 정보가 추가된 동일한 요청을 보낸다.
    4. 서버는 Authorization 헤더의 값을 보고 사용자 인증 및 인가 절차를 거쳐 해당 리소스 접근 권한이 있는지 판단.
    5. 접근 권한이 없다면 403 Forbidden, 있다면 200 OK와 함께 리소스 본문을 담은 응답을 반환한다.

깜짝 퀴즈: Authorization: Bearer {ACCESS_TOKEN} 에서 Bearer의 의미는?

Bearer 자체는 어떤 특별한 동작을 트리거하거나 하지는 않지만, 보통 Access Token이 Authorization 헤더에 값으로 전달될 때 토큰 앞에 붙여 해당 값이 Access Token임을 나타내는 일종의 약속

  1. 세션 쿠키와 지속 쿠키는 무엇인가?
    1. 쿠키는 브라우저에 저장되며, 브라우저 종료 시 삭제 여부를 판단하기 위한 Discard 속성이나, Max-Age, Expires와 같이 유효기한을 나타내기 위한 속성이 포함될 수 있다.
    2. 위의 헤더들이 포함된 쿠키는 지속 쿠키. 지속 쿠키는 Discard의 조건을 만족하면서 브라우저가 종료되거나, 유효기간이 지났을 때 소멸.
    3. 반면 세션 쿠키에는 위의 만료 기한을 나타내는 헤더가 포함되지 않으며, 브라우저가 종료될 때 소멸.
  2. 쿠키 Domain 속성은 어떤 역할을 하는가?
    1. Domain 속성은 이 Cookie 어떤 도메인이 받을 수 있는지 지정하는 역할이다.
    2. 예를 들어 Domain이 .inu.com일 경우 super.inu.com은 이 쿠키를 받을 수 있지만, supder.not-inu.com은 이 쿠키를 받지 못 한다.
    3. 주의: inu.com일 경우, super.inu.com에서도 이 쿠키를 받을 수 없다. 정확히 inu.com 도메인만 이 쿠키를 받을 수 있다.
    4. 실제로 응답 헤더에서 Cookie를 볼 수 있지만, 브라우저에서 저장하지 않음.

12장. 기본 인증

  1. BASE64 인코딩과 암호화의 차이는?
    1. BASE64는 8비트 바이트 3개를 6비트씩 4개로 쪼개어 변환한 것.BASE64 인코딩을 통해 인코딩된 문자열은 디코딩을 통해 원 문자열을 획득할 수 있다.
    2. 사실상 실제 데이터를 그대로 보내는 것과 같다.
    3. 모든 문자를 64개의 문자로만 표현.
    4. 암호화는 알고리즘과 암호화 키를 통해 키를 가지고 있는 사람을 제외한 나머지는 내용을 알 수 없도록 하는 것.
    5. 따라서 한번 암호화된 문자열은 암호화 키를 가진 사람을 제외하고는 원 문자열을 획득할 수 없다.