[Network] 인증(Authorization)

2024. 8. 15. 23:54・CS/Network

인증을 무엇으로 할까?

  • 등록된 본인만이 알고 있는 정보
  • 등록한 본인만이 가지고 있는 정보 등
  • 패스워드, 원타임토큰, 전자증명서, 바이오매트릭스, IC카드

HTTP에서 사용하는 인증방법

  • BASIC
  • DIGEST
  • SSL Client
  • Form Base

1. BASIC 인증

HTTP/1.0에 구현된 인증방식

  1. 클라이언트: 리퀘스트 송신
  2. 서버:상태코드 401로 응답해서 인증이 필요하다는 것을 전달
  3. 유저가 ID와 패스워드를 입력하면, 브라우저가 자동적으로 Base64 로 변환
    • 클라이언트: 유저ID와 패스워드를 Base64형식으로 인코드 한 것을 송신
  4. 서버: 인증 성공 시에는 상태코드 200 응답. 실패했을 경우 다시 상태코드 401로 응답
    • 서버는 인증정보가 정확한지 여부를 판단함

단점: 

Base64라는 인코딩 형식을 사용하고 있지만, 암호화는 아님

따라서 아무런 부가 정보 없이 복호하 가능

즉 HTTPS 등에서 암호화되지 않은 통신 경로 상 BASIC 인증을 해서 도청된 경우, 복호화 된 유저ID와 패스워드 뺏길 가능성 있음

한번 BASIC 인증을 하면, 일반 브라우저에서는 로그아웃 불가능(사용상 문제가 많고 보안등급이 낮음)

 

2. DIGEST 인증

BASIC 인증 약점 보완, HTTP/1.1에 소개

챌린지 리스폰스 방식 사용

  • 최초 상대방에게 인증요구 보냄
  • 상대방 측에서 받은 챌린지 코드를 사용해서, 리스폰스 코드 계산함
  • 이 값을 상대에게 송신하여 인증함(패스워드 누출 가능성 낮음)

DIGEST 인증 수순

  1. 클라이언트: 리퀘스트 송신
  2. 서버: 상태코드 401로 응답해서 인증이 필요하다는 것을 전달하는 동시에 패스워드와 챌린지코드(nonce) 송신함
  3. 클라이언트: 패스워드와 챌린지 코드에서 리스폰스 코드(response)를 계산해서 송신
  4. 서버: 인증 성공 시 상태코드 200 응답, 실패 시 다시 상태코드 401 응답

3. SSL Client 인증

HTTPS의 클라이언트 인증서를 이용한 인증방식

  • SSL Client 인증은 2-factor 인증에서 사용
  • SSL Client 인증은, 폼 베이스 인증과 합쳐서 2-factor인증의 하나로서 이용
    • 2-factor 인증: 이용자가 가진 다른 정보를 병용해서 인증하는 방법
    • 첫번째 인증 정보로서, SSL 클라이언트 인증을 사용하여 클라이언트 컴퓨터를 인증
    • 다른 인증정보로서, 패스워드를 사용하여 유저의 본인 확인을 함(본인이 올바른 컴퓨터에 엑세스하고 있음을 확인)

단점: SSL Client 인증은 이용하는데 비용이 든다

 

4. 폼 베이스(Form Base) 인증

  • HTTP 프로토콜로서 사양이 정의되어 있는 인증방식은 아님
  • 클라이언트가 서버상의 웹 애플리케이션에 자격정보(Credential)를 송신하여, 그 자격정보의 검증결과에 따라 인증하는 방식
  • 대부분 사전 등록된 자격정보인 유저ID와 패스워드를 입력해서 웹 애플리케이션에 송신, 검증결과를 토대로 검증 성공여부 결정함

인증의 대부분은 폼 베이스 인증

  • BASIC/DIGEST 인증의 문제: 사용상 문제, 보안문제
  • SSL 클라이언트 인증의 문제: 도입비용 및 운용비용의 문제

세션 관리와 쿠키에 의한 구현

  • HTTP는 스트레이트 프로토콜
  • 방금 전에 인증을 성공했던 유저라는 상태를, 프로토콜 레벨에서는 유지 불가능
  • 즉, 상태관리가 안됨(다음에 유저가 엑세스 하더라도 다른 유저들과 구별 불가)
  • 세션 관리와 쿠키를 사용 => HTTP에 없는 상태관리기능을 보충
저작자표시 비영리 (새창열림)

'CS > Network' 카테고리의 다른 글

[Network] HTTP의 병목현상과 WebSocket  (0) 2024.08.16
[Network] HTTPS 구조  (0) 2024.08.15
[Network] HTTP 헤더  (0) 2024.07.25
[Network] HTTP와 연계하는 웹 서버  (0) 2024.07.09
[Network] HTTP 상태코드  (0) 2024.07.02
'CS/Network' 카테고리의 다른 글
  • [Network] HTTP의 병목현상과 WebSocket
  • [Network] HTTPS 구조
  • [Network] HTTP 헤더
  • [Network] HTTP와 연계하는 웹 서버
dev.hyejin
dev.hyejin
  • dev.hyejin
    혜진의 개발자 성장블로그
    dev.hyejin
  • 전체
    오늘
    어제
    • 분류 전체보기 (89)
      • 2024 데브캠프 (2)
      • 회고 (1)
      • 이슈해결 (3)
      • 기초학습 (13)
      • Frontend (20)
        • JavaScript (3)
        • Git, GitHub (3)
        • HTML, CSS (14)
      • Backend (8)
        • Database (4)
        • Java (4)
      • CS (16)
        • Network (10)
        • Algorithm (6)
      • Eng (16)
      • Tips (5)
  • 인기 글

  • 태그

    절대경로
    시간복잡도
    GitHub
    객체
    점근성능
    border-box
    런타임
    ER모델
    box-sizing
    상대경로
  • hELLO· Designed By정상우.v4.10.3
dev.hyejin
[Network] 인증(Authorization)
상단으로

티스토리툴바