ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [HTTP 완벽 가이드 12장] 기본 인증
    Network 2020. 6. 22. 10:28
    반응형

    12.1 인증

    1) HTTP의 인증요구/응답 프레임워크

    • HTTP는 사용자 인증을 하는 데 사용하는 자체 인증요구/응답 프레임워크를 제공한다.

    HTTP 인증요구/응답

    • 웹 애플리케이션이 HTTP 요청 메시지를 받으면, 서버는 요청을 처리하는 대신에 현재 사용자를 식별할 수있는 '인증 요구'로 응답할 수 있다.
    • 인증 요구 응답을 받은 사용자는 다시 요청을 보낼 때 인증 정보(사용자 이름과 패시워드)를 첨부해야 한다.

    2) 인증 프로토콜과 헤더

    • HTTP는 필요에 따라 고쳐 쓸 수 있는 제어 헤더를 통해, 다른 인증 프로토콜에 맞추어 확장할 수 있는 프레임워크를 제공한다.
    단계 헤더 설명 메서드/상태
    요청 첫 번째 요청에는 인증 정보가 없다 GET
    인증 요구 WWW-Authenticate 서버는 사용자에게 인증을 요구하며 401 상태 정보로 요청을 반려한다.
    서버에는 각각 다른 비밀번호 영역이 있으므로 WWW-Authenticate 헤더에 해당 영역을 설명해 놓는다.
    401 Unathorized
    인증 Authorization 클라이언트는 요청을 다시 보내는데, 인증 알고리즘과 사용자 이름과 비밀번호를 기술한 Authorization 헤더를 함께 보낸다. GET
    성공 Authentication-Info 인증 정보가 정확하다면, 서버는 문서와 함께 응답한다.
    특정 인증 알고리즘은 선택적 헤더인 Authentication-Info에 인증 세션에 관한 추가 정보를 기술해서 응답하기도 한다.
    200 OK
    • 클라이언트가 서버로 인증하려면, 인코딩된 비밀번호와 그 외 파라미터들을 Authorization 헤더에 담아서 요청을 다시 보낸다.
    • 인증 요청이 성공적으로 완료되면, 서버는 정상적인 코드(eg. 200 OK)를 반환하며, 추가적인 알고리즘에 대한 정보를 Authentication-Info 헤더에 기술할 수도 있다.

    3) 보안 영역

    WWW-Authenticate: Basic realm="Family"

    • 웹 서버는 기밀문서를 보안 영역(realm) 그룹으로 나누며, 보안 영역은 저마다 다른 사용자 권한을 요구한다.

    12.2 기본 인증

    • 기본 인증은 가장 잘 알려진 HTTP 인증 규약이다.
    • 원래 HTTP/1.0에 기술되어 있었지만, HTTP 인증의 상세 내용을 다루는 RFC 2617로 옮겨졌다.

    1) 기본 인증의 예

    1. 사용자가 자신의 가족사진인 /family/jeff.jpg 요청한다.
    2. 서버가 WWW-Authenticate 헤더와 함께 개인 가족사진에 접근하는 데 필요한 비밀번호를 요구하는 401 Unauthorization Required 응답을 반환한다.
    3. 브라우저가 401 응답을 받고 Family 영역에 관한 사용자 이름과 비밀번호를 요구하는 대화상자를 띄운다.
    4. 사용자가 사용자 이름과 비밀번호를 입력하면, 브라우저는 그것들을 콜론으로 이어 붙이고(eg. admin:admin), base-64 방식으로 인코딩한 후에 Authorization 헤더에 그 값을 담아 다시 서버로 요청한다.
    5. 서버가 사용자 이름과 비밀번호를 디코딩하고, 그 값이 정확한지 검사한 후, 문제가 없으면 HTTP 200 OK 메시지와 함께 요청 받았던 문서를 응답한다.
    인증요구/응답 헤더 문법과 설명
    인증요구
    (서버에서 클라이언트로)
    각 사이트는 보안 영역마다 다른 비밀번호가 있을 것이다.
    realm은 요청 받은 문서 집합의 이름을 따옴표로 감싼 것으로, 사용자는 이 정보를 보고 어떤 비밀번호를 사용해야 하는지 알 수 있다.
    WWW-Authenticate: Basic realm=따옴표로 감싼 문서 집합 정보
    응답
    (클라이언트에서 서버로)
    사용자 이름과 비밀번호는 콜론으로 잇고, base-64로 인코딩해서 사용자 이름과 비밀번호에 쉽게 국제문자를 포함할 수 있게 하고, 네트워크 트래픽에 사용자 이름과 비밀번호가 노출되지 않게 한다.
    Authorization: Basic base-64로 인코딩한 사용자 이름과 비밀번호
    • 기본 인증은 Authentication-Info 헤더를 사용하지 않는다.

    2) Base-64 사용자 이름/비밀번호 인코딩

    • Base-64 인코딩은 바이너리, 텍스트, 국제 문자 데이터(어떤 시스템에서는 문제를 일으킬 수 있는) 문자열을 받아서 전송할 수 있게, 그 문자열을 전송 가능한 문자인 알파벳으로 변환하기 위해 발명됐다.
    반응형
Designed by Tistory.